Ori*_*ent 18 c++ lambda member-initialization language-lawyer c++14
#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);
}
Run Code Online (Sandbox Code Playgroud)
适用于clang++来自中继的工作正常,但是g++从中继失败并出现错误消息(链接):
错误:没有为此lambda函数捕获'this'
point_of_conein namespace范围的定义适用于两者.
使用[this]lambda捕获进行略微修改的定义也适用于全局或局部范围.
哪个编译器是对的?
Col*_*mbo 11
这是一个gcc bug.
int main() {
struct A {
int x, i = [&] { return x; }();
} a{0};
}
Run Code Online (Sandbox Code Playgroud)
这失败了,但如果我们......
&到this,或A具有命名空间范围,有用.但是,这些都不会对良好形成产生任何影响.
报道:#78019.