struct Test
{
static const int value = []() -> int { return 0; } ();
};使用gcc-4.6时,我得到的结果类似于error: function needs to be constexpr。我尝试过将constexpr放在不同位置的多种组合,但没有成功。
lambda函数是否也支持constexpr (不管是否指定了return类型)?正确的语法是什么?
有没有可能的变通办法?
发布于 2015-09-21 22:06:08
更新:从C++17开始,在常量表达式中允许使用lambda。
根据expr.const/(2.6),当前不允许在常量表达式中使用Lambdas (C++14),但是一旦被接受(可以在工作草案N4582中找到):
这个提议建议允许在常量表达式中使用lambda表达式,取消现有的限制。作者建议允许某些lambda表达式和对某些闭包对象的操作出现在常量表达式中。为此,我们还建议,如果闭包类型的每个数据成员的类型都是文字类型,则将其视为文字类型;如果在lambda声明符中省略了
constexpr说明符,则如果生成的函数调用运算符满足constexpr函数的要求,则生成的函数调用运算符为constexpr(类似于已经对隐式定义的构造函数和赋值运算符函数进行的constexpr推断)。
发布于 2011-06-21 11:48:30
从C++0x FDIS§7.1.5dcl.stexpr/1:
constexpr说明符只能应用于变量的定义、函数或函数模板的声明或文本类型的静态数据成员的声明。
lambda表达式不是这些东西,因此不能被声明为constexpr。
发布于 2016-08-09 18:35:20
早于C++17的lambda与constexpr不兼容。它们不能在常量表达式中使用。
以C++17 lambda开始的在有意义的地方是constexpr。建议的N4487将被放入C++17标准中。国际标准化组织C++委员会主席Herb Sutter在his website上说:
Lambdas现在是allowed inside constexpr functions。
https://stackoverflow.com/questions/6420085
复制相似问题