Clang 泛型 Lambda 无法在编译期执行怎么办?
I can't use generic lambdas at compile-time, now what?
作为 k3tchup 单元测试库的作者,我在支持 Clang 16 时遇到了一个棘手问题:泛型 Lambda 无法在编译期(consteval)执行。这直接威胁到我库中“状态化”测试包的设计,该设计需要 Lambda 同时在编译期和运行期执行以实现更简洁的语法。为了解决非模板上下文中 if constexpr 的语义检查陷阱,我原本计划使用泛型 Lambda 进行类型分发,却撞上了 Clang 的 Bug。本文详细记录了我如何绕过这一限制,在不依赖泛型 Lambda 编译期执行的前提下,通过函数模板和运行时机制实现预期功能,同时也分享了我在 CppCon 和 NDC TechTown 的参会见闻。
在巨人的高塔中,占据你的位置。