以下代码与GCC编译良好:
constexpr struct {} s;
但Clang拒绝了它,并出现以下错误:
错误:const类型的对象的默认初始化&#const; const struct(anonymous struct at ...)'没有用户提供的默认构造函数
我已经测试了我能够在https://gcc.godbolt.org/找到的所有GCC和Clang版本。每个版本的GCC都接受代码,而Clang的每个版本都拒绝它。
我想知道在这种情况下哪个编译器是正确的?
标准对此有何看法?
答案 0 :(得分:39)
Clang坚持[dcl.init]/7中的以下段落:
如果程序要求对const限定类型
T
的对象进行默认初始化,则T
应为具有用户提供的默认构造函数的类类型。
这个措辞是defective和hence ignored by GCC(从v3.9开始,也是Clang)。
以上引用与核心问题253的不同之处在于N2762移动/调整了引用的第9段。