是否使用lambda函数/expression式支持constexpr?

struct Test { static const int value = []() -> int { return 0; } (); }; 

有了gcc-4.6,我得到了类似的error: function needs to be constexpr 。 我尝试过在各个地方放置constexpr多种组合,但没有运气。

是否也支持lambda函数的constexpr (不pipe是否指定returntypes)? 什么是正确的语法?

任何可能的工作?

Lambdas目前(C ++ 14)不允许在常量expression式[expr.const] /(2.6)中,但是一旦N4487被接受(可以在工作草案N4582中find):

这个build议build议在常量expression式中允许使用lambdaexpression式,消除现有的限制。 作者提出,某些闭包对象的某些lambdaexpression式和操作允许在常量expression式中出现。 在这样做的时候,我们也build议如果每个数据成员的types是一个文字types的话,那么闭包types就被认为是一个文字types; 如果在lambda声明符中省略了constexpr说明符,那么如果生成的函数调用操作符能够满足constexpr函数的要求(类似于隐式定义的构造函数和赋值运算符已经出现的constexpr推理function)。

从C ++ 0x FDIS§7.1.5[dcl.constexpr] / 1:

constexpr说明符只能应用于variables的定义,函数或函数模板的声明或者文字types的静态数据成员的声明。

lambdaexpression式不是这些东西,因此可能不会被声明为constexpr

之前的C ++ 17 lambda与constexpr不兼容。 它们不能在常量expression式中使用

从C ++ 17开始, lambdaexpression式是constexpr ,它是有意义的。 提案N4487将被放入C ++ 17标准。 在他的网站上,ISO C ++委员会主席Herb Sutter指出:

现在允许 Lambda 在constexpr函数内 。