提问者:小点点

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


constexpr struct {} s;

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

我想知道在这种情况下哪个编译器是正确的?
标准对此有什么规定?


共1个答案

匿名用户

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

如果程序调用常量限定类型T的对象的默认初始化,则T应是具有用户提供的默认构造函数的类类型。

这种措辞有缺陷,因此被GCC忽略了(从V3.9开始,也被Clang忽略了)。
以上引用与核心问题253的不同,因为N2762移动/调整了所引用的第9段。