【发布时间】:2021-06-02 00:44:39
【问题描述】:
考虑以下代码:
auto f() {
const auto x = 1;
return [] (auto) { return x; };
}
GCC and MSVC compiles fine but Clang rejected it。我应该信任哪个编译器?这是 Clang 尚未实现的编译器扩展还是只是 Clang 错误?
【问题讨论】:
-
如果变量具有 const 非易失性整数或枚举类型并且已使用常量表达式初始化,则 lambda 表达式可以读取变量的值而不捕获它 @987654322 @
-
仅供参考 - 小的变化,它编译
return [] (auto y) { return x + y; };也许添加[language-lawyer]? -
另一件事,为什么
gcc会抛出警告(variable 'x' set but not used [-Wunused-but-set-variable]),即使它在 lambda 中使用? -
可能相关:#20289
-
更陌生的clang编译
return [] (auto) { return +x; };
标签: c++ lambda c++17 language-lawyer c++20