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

Hol*_*Cat 41 c++ gcc clang language-lawyer constexpr

以下代码与GCC编译良好:

constexpr struct {} s;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Col*_*mbo 40

Clang遵守[dcl.init]/7中的以下段落:

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

这个措辞是有缺陷的,因此被GCC忽略(并且,从v3.9开始,也被Clang 忽略).
由于N2762移动/调整了第9段,上述引用与核心问题253不同.

  • VC++ 2015也忽略了措辞 (4认同)