Pau*_* II 27 c++ lambda language-lawyer constexpr c++11
我正在尝试使用lambda作为静态成员,如下所示:
struct A
{
static constexpr auto F = [](){};
};
int main()
{
A::F();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是否是正确的C++ 11代码?在clang上,我收到此错误:
error: constexpr variable 'F' must be initialized by a constant
expression
static constexpr auto F = [](){};
^~~~~~
Run Code Online (Sandbox Code Playgroud)
似乎在铿锵声中,lambdas不被视为常数表达.它是否正确?也许他们还没有在clang中完全实现lambdas,因为gcc 4.7似乎允许它作为a constexpr,但是它给出了另一个错误:
error: ‘constexpr const<lambda()> A::F’, declared using local type ‘const<lambda()>’, is used but never defined
Run Code Online (Sandbox Code Playgroud)
我不确定,我明白这意味着什么.它似乎正确地推断出lambda的类型,但它只声明它而不是定义它.我该如何定义它?
Ric*_*ith 17
此代码格式错误.甲constexpr需要变量由常量表达式被初始化,并且[expr.const]p2表示:
甲条件表达式是一个核心常量表达式除非它涉及以下作为一个潜在的评价子表达式中的一个[...]:
- 一个lambda表达式
因此,GCC接受此代码是不正确的.
这是为类提供lambda类型的静态数据成员的一种方法:
auto a = []{};
struct S {
static decltype(a) b;
};
decltype(a) S::b = a;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6145 次 |
| 最近记录: |