GCC接受`constexpr struct {};`但Clang拒绝它。 谁是正确的?
下面的代码用GCC编译得很好:
constexpr struct {} s;
但铿锵拒绝它与以下错误:
错误:默认初始化一个consttypes为“const struct(anonymous struct at …)”的对象,没有用户提供的默认构造函数
我已经testing了所有版本的GCC和Clang,我可以在https://gcc.godbolt.org/find。 GCC的每个版本都接受代码,Clang的每个版本都拒绝它。
我想知道哪种编译器在这种情况下是正确的?
标准对此有何评论?
Clang在[dcl.init] / 7中遵循以下段落:
如果一个程序调用一个const限定types
T
的对象的默认初始化,T
应该是一个具有用户提供的默认构造函数的类types。
这个措辞是有缺陷的 , 因此被海合会忽略了 (从3.1版开始,也是由Clang )。
上述报价与核心问题253有所不同,原因在于N2762如上所述移动/调整第9段。