相关疑难解决方法(0)

非平凡的析构函数使得类非平凡可构造

考虑以下代码:

#include <type_traits>

struct T {};

static_assert(std::is_trivially_destructible< T >{});
static_assert(std::is_trivially_default_constructible< T >{});

struct N { ~N() { ; } };

static_assert(!std::is_trivially_destructible< N >{});
static_assert(!std::is_trivially_default_constructible< N >{});
Run Code Online (Sandbox Code Playgroud)

它编译好使用clang 3.7.0:实例.但总结标准:

如果满足以下所有条件,则类T的默认构造函数是微不足道的(即不执行任何操作):

  • 构造函数不是用户提供的(即,隐式定义或默认)
  • T没有虚拟成员函数
  • T没有虚拟基类
  • T没有使用默认初始值设定项的非静态成员.(自C++ 11以来)
  • T的每个直接基都都有一个普通的默认构造函数
  • 类类型的每个非静态成员都有一个普通的默认构造函数

正如我所看到的,不依赖于析构函数的琐碎性.

我错过了什么?是clangbug吗?

额外

我找到了一个解决方法:static_assert(__has_trivial_constructor( N ));内置类型特征.有支持clang,gccMSVC.

对于is_noexcept_constructible类型特征的家庭也有解决方法.

c++ destructor

16
推荐指数
1
解决办法
964
查看次数

标签 统计

c++ ×1

destructor ×1