代码之家  ›  专栏  ›  技术社区  ›  HolyBlackCat

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

  •  46
  • HolyBlackCat  · 技术社区  · 10 年前

    以下代码可以用GCC很好地编译:

    constexpr struct {} s;
    

    但Clang拒绝了,错误如下:

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

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

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

    1 回复  |  直到 10 年前
        1
  •  42
  •   Columbo    10 年前

    Clang坚持以下段落 [dcl.init]/7 :

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

    这个措辞是 defective hence ignored by GCC (并且,从第3.9版开始,也通过 Clang ).
    上述报价与核心问题253不同,原因是 N2762 移动/调整引用的第9段。