【问题标题】:GCC accepts `constexpr struct {} s;` but Clang rejects it. Who is correct?GCC 接受 `constexpr struct {} s;` 但 Clang 拒绝它。谁是正确的?
【发布时间】:2016-10-20 22:38:28
【问题描述】:

以下代码可以使用 GCC 正常编译:

constexpr struct {} s;

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

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

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

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

【问题讨论】:

标签: c++ gcc clang language-lawyer constexpr


【解决方案1】:

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

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

这个措辞是defectivehence ignored by GCC(并且,从v3.9 开始,也是Clang)。
由于N2762 移动/调整引用的第 9 段,上述引用与核心问题 253 不同。

【讨论】:

  • VC++2015 也忽略了措辞
猜你喜欢
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2017-06-05
  • 2022-10-12
  • 2015-06-11
  • 1970-01-01
相关资源
最近更新 更多