#include <cassert>
#include <cmath>
int main()
{
struct point_of_cone
{
double x, y;
double z = [&] { using std::sqrt; return sqrt(x * x + y * y); }();
};
point_of_cone p = {3.0, 4.0};
assert(p.z == 5.0);
}
对于来自干线的clang++
工作正常,但对于来自干线的g++
失败,并显示错误消息(link):
此错误:没有为此lambda函数捕获‘
’
在名称空间作用域中定义point_of_cone
对这两种情况都适用。
使用[this]
lambda capture略微修改定义,也可以在全局或局部范围内工作。
哪个编译器是正确的?
发布于 2016-10-18 19:24:03
那是一个gcc的虫子。
int main() {
struct A {
int x, i = [&] { return x; }();
} a{0};
}
这失败了,但是如果我们…
&
更改为this
,或A
具有命名空间作用域,它起作用了。然而,这些都不应该对格式良好性产生任何影响。
报道:#78019。
https://stackoverflow.com/questions/40106430
复制相似问题