GCC接受`constexpr结构{};“但是叮当拒绝了,谁是正确的?

ukxgm1gy  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(78)

下面的代码在GCC中编译良好:

constexpr struct {} s;

但Clang拒绝了它,并犯了以下错误:
错误:没有用户提供的默认构造函数的const类型“const struct(anonymous struct at ...)”的对象的默认初始化
我已经测试了我在https://gcc.godbolt.org/上能找到的所有GCC和Clang版本。GCC的每个版本都接受代码,而Clang的每个版本都拒绝它。

**我想知道在这种情况下哪个编译器是正确的?

标准对此有何规定?**

bfrts1fy

bfrts1fy1#

Clang遵循[dcl.init]/7中的以下段落:
如果一个程序调用一个常量限定类型T的对象的默认初始化,那么T应该是一个具有用户提供的默认构造函数的类类型。
这段文字是defective,因此被GCC忽略(从v3.9开始,也被Clang忽略)。
由于N2762移动/调整了引用的第9段,上述引用与核心问题253不同。

相关问题