#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++
主干失败并显示错误消息(链接):
错误:没有为此 lambda 函数捕获“this”
命名空间范围内的定义point_of_cone
对两者都适用。
使用 lambda 捕获稍作修改的定义[this]
也适用于全局或本地范围。
哪个编译器是对的?