我知道generic lambdas,我知道变量模板,但是,这有什么作用?它甚至被允许了吗?
template<typename T>
auto f = [](auto a, T b){ /**/ };
如果允许,可以按预期使用吗?也就是说,f<type>(var_a, var_b)
?
答案 0 :(得分:6)
必须声明变量模板constexpr
。 lambda不能出现在常量表达式中,因此不允许初始化,并且其operator()
不声明为constexpr
,因此调用它是不允许的。
总之,这在当前的C ++ 14草案中是不正确的。
注意:奇怪的是,即使 lambda-expression 不能出现在常量表达式中,似乎lambda的闭包类型可能有{{1复制/移动构造函数。
答案 1 :(得分:1)
此代码现在在C ++ 14的当前草案中是合法的,并且它与clang 3.5 trunk编译良好 p>