具有未初始化成员的结构的constexpr默认构造函数仅在模板化时有效
constexpr default constructor for struct with uninitialized member works only when templated
似乎允许我显式默认具有未初始化成员的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限定类型
T
、T
的对象应为具有用户提供的默认构造函数。
不管它是不是模板。
相关文章:
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 我应该将哪种有效负载类型发送给webrtc::P ayloadRouter的构造函数?
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- 为什么即使直接构造函数有效,template_back也会失败
- 提供初始值设定项列表构造函数的有效方法
- 让构造函数在其初始化列表中调用同一类的另一个构造函数是否有效
- 字符串或const char*,更有效地用作构造函数参数
- 字符串构造函数将两个字符* 放入另一个 std::string 在 C++14 中有效,但不适用于 C++17
- 以 std::p air 作为参数的构造函数:T a({1,2}) 有效,T a = {1,2} 不工作
- 没有参数的构造函数无法正常工作,但有效
- 调用不带参数的构造函数有效,使用参数则无效。为什么?
- 具有未初始化成员的结构的constexpr默认构造函数仅在模板化时有效
- std::使用了move,调用了move构造函数,但对象仍然有效
- C++ 为什么这些构造函数调用中有 3 个有效,但有一个不起作用?
- 检测默认构造函数是否有效
- C++:如果所有数据可能都已有效,则在构造函数中进行验证是否有开销
- 在构造函数后初始化零向量的有效方法
- 如何处理传递给构造函数的语法有效但逻辑无效的参数
- 在派生类构造函数中复制继承的成员有效吗
- 当我们进行复制初始化时,复制构造函数或构造函数是否有效