我知道这就像打开潘多拉盒子,但它一直困扰着我。考虑一个简单的例子:
#include <type_traits>
template <auto>
struct Foo: std::false_type { };
template <>
struct Foo<[](){return 1;}()>:std::true_type { };
int main() {
static_assert(Foo<1>::value);
}
我知道lambdas不能在未计算的上下文中声明,但显然这里不是这种情况。更奇怪的是clang 5.0.0 (我猜,它首先部分支持constexpr lambda) does compile it。
这是一个编译器错误还是C++17会允许这样做?
发布于 2019-04-05 00:26:17
在C++17中,你可以通过函数指针类型将指针作为模板参数传递给lambda函数:
# include <cassert>
template<int(*fn)()>
int get_twice()
{
return fn() * 2;
}
int main()
{
int result = get_twice <+[]() { return 42; }> ();
assert(result == 84);
}
https://stackoverflow.com/questions/44485610
复制相似问题