GCC接受`constexpr struct {} s;`但Clang拒绝它。谁是对的?

时间:2016-06-19 16:45:05

标签: c++ gcc clang language-lawyer constexpr

以下代码与GCC编译良好:

constexpr struct {} s;

但Clang拒绝了它,并出现以下错误:

  

错误:const类型的对象的默认初始化&#const; const struct(anonymous struct at ...)'没有用户提供的默认构造函数

我已经测试了我能够在https://gcc.godbolt.org/找到的所有GCC和Clang版本。每个版本的GCC都接受代码,而Clang的每个版本都拒绝它。

我想知道在这种情况下哪个编译器是正确的?
标准对此有何看法?

1 个答案:

答案 0 :(得分:39)

Clang坚持[dcl.init]/7中的以下段落:

  

如果程序要求对const限定类型T的对象进行默认初始化,则T应为具有用户提供的默认构造函数的类类型。

这个措辞是defectivehence ignored by GCC(从v3.9开始,也是Clang)。
以上引用与核心问题253的不同之处在于N2762移动/调整了引用的第9段。