18
#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]也适用于全局或本地范围。

哪个编译器是对的?

4

1 回答 1

11

这是一个 gcc 错误。

int main() {
    struct A {
        int x, i = [&] { return x; }();
    } a{0};
}

这失败了,但如果我们……</p>

  • 更改&this, 或
  • 声明A为具有命名空间范围,

有用。不过,这些都不应该对格式正确有任何影响。

报告:#78019

于 2016-10-18T11:24:03.120 回答