这段代码应该编译吗?
int main()
{
int a, b;
[=, b]{ return a; };
return 0;
}
msvc 2017版15.6.1给了我一个错误:
error C3489: '&b' is required when the default capture mode is by copy (=)
相同的代码在gcc 6.3上编译正常:https://ideone.com/HzdiJw
Lightness Races in Orbit评论的解决方法:[=, b_=b]{ return a; };
。
答案 0 :(得分:1)
这在C ++ 14中是非法的:
[C++14: 5.1.2/8]:
[..] 如果 lambda-capture 包含 capture-default ,即=
, lambda-capture 的每个 simple-capture 应为“& identifier
”形式。 [..]
[N4727: 8.4.5.2/2]:
[..] 如果 lambda-capture 包含 capture-default = =,则 > lambda-capture 的简单捕获的格式应为“& identifier
”,“this
”或“* this
”。 [..]
它不太可能在C ++中变得合法17然后再次变得非法。
此外,GCC 6.3 does complain about this code,因此ideone.com环境正在构建时没有-Werror
,然后报告成功构建而不传递警告。