下面的代码在GCC中编译良好:
constexpr struct {} s;
但Clang拒绝了它,并犯了以下错误:
错误:没有用户提供的默认构造函数的const类型“const struct(anonymous struct at ...)”的对象的默认初始化
我已经测试了我在https://gcc.godbolt.org/上能找到的所有GCC和Clang版本。GCC的每个版本都接受代码,而Clang的每个版本都拒绝它。
**我想知道在这种情况下哪个编译器是正确的?
标准对此有何规定?**
下面的代码在GCC中编译良好:
constexpr struct {} s;
但Clang拒绝了它,并犯了以下错误:
错误:没有用户提供的默认构造函数的const类型“const struct(anonymous struct at ...)”的对象的默认初始化
我已经测试了我在https://gcc.godbolt.org/上能找到的所有GCC和Clang版本。GCC的每个版本都接受代码,而Clang的每个版本都拒绝它。
**我想知道在这种情况下哪个编译器是正确的?
标准对此有何规定?**
1条答案
按热度按时间bfrts1fy1#
Clang遵循[dcl.init]/7中的以下段落:
如果一个程序调用一个常量限定类型
T
的对象的默认初始化,那么T
应该是一个具有用户提供的默认构造函数的类类型。这段文字是defective,因此被GCC忽略(从v3.9开始,也被Clang忽略)。
由于N2762移动/调整了引用的第9段,上述引用与核心问题253不同。