似乎只有在struct是模板的情况下,才允许使用未初始化的成员显式地默认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难题。



那么您的程序无论哪种方式都是无效的。



不管是否是模板都没有关系。

关于c++ - 具有未初始化成员的struct的constexpr默认构造函数仅在模板化时有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37245834/

10-15 01:04