C++ 无捕获的Lambda值返回
这源于 以下程序在gcc和icc上编译,但在VS和clang上编译失败:C++ 无捕获的Lambda值返回,c++,gcc,lambda,clang++,icc,C++,Gcc,Lambda,Clang++,Icc,这源于 以下程序在gcc和icc上编译,但在VS和clang上编译失败: template <typename Y> auto add_value(Y y) { const short z{9}; return [y](auto x) { return z; }; } int main() { add_value(2); } 模板 自动添加值(Y) { 常数短z{9}; 返回[y](自动x) { 返回z; }; } int
template <typename Y>
auto add_value(Y y)
{
const short z{9};
return [y](auto x)
{
return z;
};
}
int main()
{
add_value(2);
}
模板
自动添加值(Y)
{
常数短z{9};
返回[y](自动x)
{
返回z;
};
}
int main()
{
增加价值(2);
}
标志是:-std=c++14-O2-Wall-Wshadow-pedantic-pthread
哪个是正确的?我想gcc在这里是正确的?但我更希望这次失败 您可以将链接粘贴到godbolt而不是屏幕截图。如果将其更改为
static const z{9},clang将编译该链接
这是ODR使用问题吗?是的,似乎是ODR问题。如果您更改返回z,clang会编译它代码>到返回+z代码>,或者如果显式指定lambda的返回类型。