Elv*_*ric 4 c++ gcc clang c++14 c++17
从切换clang到时,我遇到奇怪的行为gcc。报告错误clang时成功编译代码gcc。这是重现该行为的一个最小示例。我已经尝试过c++14并c++17与多个clang和gcc版本。
谁在这里,c还是gcc?
struct A {
int value;
};
auto makeCallback(const A& a) {
auto callback = [aCopy = a](int i) {
[aCopy, i]() mutable { aCopy.value = i; }();
};
return callback;
}
Run Code Online (Sandbox Code Playgroud)
编辑:将外部lambda更改为mutable,即可解决上的问题gcc。
clang是对的。内部闭包aCopy按值捕获,并且进行变异不会影响外部闭包。gcc似乎对相关变量的名称感到困惑。您可以通过给它起一个其他名称来解决此问题。例:
auto callback = [aCopy = a](int i) {
[anotherName = aCopy, i]() mutable { anotherName.value = i; }();
};
Run Code Online (Sandbox Code Playgroud)
这与clang和一起编译gcc。
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |