最終更新日時:
が更新

履歴 編集

class template
<type_traits>

std::is_trivially_destructible(C++11)

namespace std {
  template <class T>
  struct is_trivially_destructible;
}

概要

Tがトリビアルに破棄可能か調べる。

要件

Tは完全型であるか、const/volatile修飾された(あるいはされていない)voidか、要素数不明の配列型でなければならない。

効果

is_trivially_destructibleは、Tがトリビアルに破棄可能な型であるならばtrue_typeから派生し、そうでなければfalse_typeから派生する。

「トリビアルに破棄可能」とは、ユーザー定義されないデストラクタを持っているということを意味する。

#include <type_traits>

struct C1 {
  // トリビアルなデストラクタを持っている

  // 特殊関数ではないメンバ関数は持っている
  int f(int x) const { return x; }
};

struct C2 {
  // 非トリビアルなデストラクタを持っている
  ~C2() {}
};

// 組み込み型は全てトリビアルに破棄可能
static_assert(std::is_trivially_destructible<int>::value == true, "int is trivially destructible");
static_assert(std::is_trivially_destructible<int*>::value == true, "int* is trivially destructible");

// ユーザー定義型は、ユーザー定義のデストラクタを持っていなければトリビアルに破棄可能
static_assert(std::is_trivially_destructible<C1>::value == true, "C1 is trivially destructible");
static_assert(std::is_trivially_destructible<C2>::value == false, "C2 isn't trivially destructible");

int main() {}

出力

バージョン

言語

  • C++11

処理系