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