1

我知道通用 lambdas,也知道变量模板,但是,这是做什么的?甚至允许吗?

template<typename T>
auto f = [](auto a, T b){ /**/ };

如果允许,是否可以按预期使用?也就是说,作为f<type>(var_a, var_b)?

4

2 回答 2

6

必须声明变量模板constexpr。lambda 不能出现在constant-expression中,因此不允许初始化,并且operator()未声明它,因此不允许调用它constexpr

总之,这在当前的 C++14 草案中是错误的。

注意:奇怪的是,即使lambda 表达式不能出现在constant-expression中,似乎 lambda 的闭包类型可能有一个constexpr复制/移动构造函数。

于 2013-10-07T10:48:10.467 回答
1

此代码现在在 C++14 的当前草案中是合法的,并且可以使用 clang 3.5 主干编译

于 2014-05-20T14:20:35.503 回答