CS *_*Pei 3 c++ lambda gcc language-lawyer clang++
以下C++代码使编译器GCC(6.3.0)和Clang(3.8.0)变得疯狂.
for (auto v : vectors2d)
for_each (begin(ret), end(ret), [v[3]] (int &n) { n+= v[3];});
Run Code Online (Sandbox Code Playgroud)
虽然以下情况很好
for (auto v : vectors2d) {
auto val = v[3];
for_each (begin(ret), end(ret), [val] (int &n) { n+= val;});
}
Run Code Online (Sandbox Code Playgroud)
我知道在C++ 14中我可以做类似的事情
for (auto v : vectors2d)
for_each (begin(ret), end(ret), [val=v[3]] (int &n) { n+= val;});
Run Code Online (Sandbox Code Playgroud)
GCC中的错误是
expected identifier before '[' token
Run Code Online (Sandbox Code Playgroud)
克朗说
expected ',' or ']' in lambda capture list
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么[v[3]]
出现在捕获列表中是违法的?
我的问题是为什么它
[v[3]]
在捕获列表中是非法的?
如N4141中的5.1.2/1 [expr.prim.lambda]中所述,捕获列表中的项应为简单捕获或初始捕获.
前者是任何一种
&
识别码this
,后者是标识符初始化器或&
标识符初始化器.
v[3]
不符合上述任何条件,因此编译器正确拒绝.
归档时间: |
|
查看次数: |
462 次 |
最近记录: |