【发布时间】: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 的每个版本都拒绝它。
我想知道在这种情况下哪个编译器是正确的?
标准对此有何规定?
【问题讨论】:
-
@T.C.无法相信找到标准变化的根源是多么痛苦的考验。我只用了 15 分钟使用二分法浏览了 git repo 和 Pete Becker 的工作草稿(幸运的是包括更改标记!),然后浏览了相应编辑报告中列出的每篇论文和核心问题,直到我最终发现 [ dcl.init]p7.有一天我会写一些东西来自动化它......
-
@Columbo 我很乐意为这样的工具付费,哈哈。
标签: c++ gcc clang language-lawyer constexpr