![](/img/trans.png)
[英]decltype() of captured variable in lambda: GCC bug and/or Clang bug?
[英]Modifying captured parameters in nested lambda: gcc vs clang?
从clang
切换到gcc
时,我遇到了一种奇怪的行为。 当gcc
报告错误时, clang
成功编译代码。 这是重现行为的最小示例。 我用c++14
和c++17
尝试了这个,有多个clang
和gcc
版本。
谁在这里,铿锵还是gcc?
struct A {
int value;
};
auto makeCallback(const A& a) {
auto callback = [aCopy = a](int i) {
[aCopy, i]() mutable { aCopy.value = i; }();
};
return callback;
}
编辑:将外部lambda更改为mutable
,解决了gcc
上的问题。
clang
是对的。 内部闭包按值捕获aCopy
,并且变异不会影响外部闭合。 gcc
似乎对相关变量的相同名称感到困惑。 您可以通过给它另一个名称来解决这个问题。 例:
auto callback = [aCopy = a](int i) {
[anotherName = aCopy, i]() mutable { anotherName.value = i; }();
};
这与clang
和gcc
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.