具有未初始化成员的结构的constexpr默认构造函数仅在模板化时有效

constexpr default constructor for struct with uninitialized member works only when templated

本文关键字:有效 构造函数 默认 初始化 成员 constexpr 结构      更新时间:2023-10-16

似乎允许我显式默认具有未初始化成员的constexpr默认构造函数,当且仅当该结构是模板。即使实例化了模板结构,也是如此。

这是正确的吗?

示例:

struct SFoo
  {
    constexpr SFoo() =default; // disallowed
    int x;
  };
template <typename tTYPE>
struct SBar
  {
    constexpr SBar() =default; // accepted
    int x;
  };
int main(int argc, char const* const argv[])
  {
    SBar<int> bar; // also accepted
    constexpr SBar<int> bar2; // disallowed (correctly)
    return 0;
  }

LLVM输出:

3:3: error: defaulted definition of default constructor is not constexpr
constexpr SFoo() =default;

LLVM和GCC都拒绝SFoo并接受SBar

如果且仅当

让我给你数学家的答案。不。试图将IIF应用于1300页的文档是一个NP难题。

这是正确的吗?

不管怎样,你的程序都是无效的。

[dcl.init/7]如果程序调用const限定类型TT的对象应为具有用户提供的默认构造函数。

不管它是不是模板。

相关文章: