【发布时间】:2020-02-16 16:56:29
【问题描述】:
考虑以下代码:
void f() {
int a = 3;
[=]() {
[=] () mutable {
a = 5;
}();
}();
}
它可以在 Clang (https://godbolt.org/z/IEXotM) 上编译,但不能在 GCC (https://godbolt.org/z/xWXFe6) 上编译。 GCC 错误:
<source>: In lambda function:
<source>:5:15: error: assignment of read-only variable 'a'
5 | a = 5;
| ~~^~~
Compiler returned: 1
根据https://en.cppreference.com/w/cpp/language/lambda,
说明符的可选序列。允许使用以下说明符:
可变:允许body修改copy捕获的参数,并 调用它们的非常量成员函数
而且 Clang 在这里的行为似乎是正确的。是这样吗?
【问题讨论】:
-
我建议你在 GCC 的 bugzilla 中创建一份错误报告,如果该报告尚不存在的话。很有可能,六年后有人甚至会修复它。
标签: c++ c++11 gcc lambda clang