为什么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 接受它(它如何处理额外的弯曲括号)?