为什么C++编译器对许多大括号的处理方式不同?

在下面的C ++程序20我把误一个额外的一对弯曲的括号{}B{{{{A{}}}}}

#include <iostream>

struct A
{
    A() { std::cout << "A() "; }
    A( A&& ) = delete;
    ~A() { std::cout << "~A() "; }
};

struct B { std::initializer_list<A> l; };

int main()
{
    [[maybe_unused]] auto x = B{{{{A{}}}}};
    std::cout << ". ";
}

Clang 拒绝了它,但是出现了一个奇怪的错误:

错误:调用“const A”的已删除构造函数

但令我惊讶的是 GCC 接受了它(https://gcc.godbolt.org/z/aPWe13xfc)。

你能解释一下为什么 GCC 接受它(它如何处理额外的弯曲括号)?

以上是为什么C++编译器对许多大括号的处理方式不同?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>