【发布时间】:2021-06-08 08:02:55
【问题描述】:
代码如下
#include <tuple>
int main()
{
auto [a] = std::make_tuple(1);
return [a]() -> int { return a; }();
}
在 clang 12 中产生错误:
<source>:6:13: error: 'a' in capture list does not name a variable
return [a]() -> int { return a; }();
<source>:6:34: error: reference to local binding 'a' declared in enclosing function 'main'
return [a]() -> int { return a; }();
但是,Visual Studio 2019 和 gcc 11 都使用 -std=c++20 -Wall -Wextra -pedantic-errors 接受它。 https://gcc.godbolt.org/z/jbjsnfWfj
所以它们仍然违反了结构化绑定永远不是变量名称的规则,使它们永远不可捕获?
【问题讨论】:
标签: c++ c++20 stdtuple structured-bindings