Skip to content

Latest commit

 

History

History
246 lines (191 loc) · 21.3 KB

type_traits.md

File metadata and controls

246 lines (191 loc) · 21.3 KB

type_traits

  • type_traits[meta header]
  • cpp11[meta cpp]

<type_traits>ヘッダでは、型の特性を判定、操作するためのクラスを定義する。

このライブラリに含まれるクラステンプレートは、メタ関数(meta function)と呼ばれている。

本ヘッダはフリースタンディング環境でも提供される。

ヘルパークラス

名前 説明 対応バージョン
integral_constant 定数を表す型 (class template) C++11
bool_constant 真理値型の定数を表す型 (class template) C++17
true_type trueを表す型 (type-alias) C++11
false_type falseを表す型 (type-alias) C++11

基本的な型

名前 説明 対応バージョン
is_void 型がvoid型か調べる (class template) C++11
is_null_pointer 型がnullptr_t型か調べる (class template) C++14
is_integral 型が整数型か調べる (class template) C++11
is_floating_point 型が浮動小数点型か調べる (class template) C++11
is_array 型が配列型か調べる (class template) C++11
is_pointer 型がポインタ型か調べる (class template) C++11
is_lvalue_reference 型が左辺値参照型か調べる (class template) C++11
is_rvalue_reference 型が右辺値参照型か調べる (class template) C++11
is_member_object_pointer 型がメンバ変数へのポインタ型か調べる (class template) C++11
is_member_function_pointer 型がメンバ関数へのポインタ型か調べる (class template) C++11
is_enum 型が列挙型か調べる (class template) C++11
is_union 型が共用型か調べる (class template) C++11
is_class 型がクラス型か調べる (class template) C++11
is_function 型が関数型か調べる (class template) C++11

組み合わせた型

名前 説明 対応バージョン
is_reference 型が参照型か調べる (class template) C++11
is_arithmetic 型が算術型か調べる (class template) C++11
is_fundamental 型が単純型か調べる (class template) C++11
is_object 型がオブジェクト型か調べる (class template) C++11
is_scalar 型がスカラ型か調べる (class template) C++11
is_compound 型が複合型か調べる (class template) C++11
is_member_pointer 型がメンバポインタ型か調べる (class template) C++11
is_scoped_enum 型がスコープ付きの列挙型か調べる (class template) C++23

型の特性

名前 説明 対応バージョン
is_const 型がconst修飾型か調べる (class template) C++11
is_volatile 型がvolatile修飾型か調べる (class template) C++11
is_trivial 型がトリビアル型か調べる (class template) C++11
is_trivially_copyable 型がトリビアルコピー可能か調べる (class template) C++11
is_standard_layout 型がスタンダードレイアウト型か調べる (class template) C++11
is_pod 型がPOD型か調べる (class template) C++11
C++20から非推奨
is_literal_type 型がリテラル型か調べる (class template) C++11
C++17から非推奨
C++20で削除
is_empty 型が空のクラスか調べる (class template) C++11
is_polymorphic 型が多相的クラスか調べる (class template) C++11
is_abstract 型が抽象クラスか調べる (class template) C++11
is_final 型にfinalが付いているかを調べる (class template) C++14
is_aggregate 型が集成体かを調べる (class template) C++17
is_signed 型が符号付き算術型か調べる (class template) C++11
is_unsigned 型が符号無し算術型か調べる (class template) C++11
is_bounded_array 型が要素数の判明している配列型かを調べる (class template) C++20
is_unbounded_array 型が要素数の不明な配列型かを調べる (class template) C++20
is_constructible 型のコンストラクタ呼出しが適格か調べる (class template) C++11
is_default_constructible 型がデフォルト構築可能か調べる (class template) C++11
is_copy_constructible 型がコピー構築可能か調べる (class template) C++11
is_move_constructible 型がムーブ構築可能か調べる (class template) C++11
is_assignable 型が代入可能か調べる (class template) C++11
is_copy_assignable 型がコピー代入可能か調べる (class template) C++11
is_move_assignable 型がムーブ代入可能か調べる (class template) C++11
is_destructible 型が破棄可能か調べる (class template) C++11
is_trivially_constructible 型がトリビアルに構築可能か調べる (class template) C++11
is_trivially_default_constructible 型がトリビアルにデフォルト構築可能かを調べる (class template) C++11
is_trivially_copy_constructible 型がトリビアルにコピー構築可能か調べる (class template) C++11
is_trivially_move_constructible 型がトリビアルにムーブ構築可能か調べる (class template) C++11
is_trivially_assignable 型がトリビアルに代入可能か調べる (class template) C++11
is_trivially_copy_assignable 型がトリビアルにコピー代入可能か調べる (class template) C++11
is_trivially_move_assignable 型がトリビアルにムーブ代入可能か調べる (class template) C++11
is_trivially_destructible 型がトリビアルに破棄可能か調べる (class template) C++11
is_nothrow_constructible 型のコンストラクタ呼出しが適格であり、かつそのコンストラクタが例外を投げないか調べる (class template) C++11
is_nothrow_default_constructible 型がデフォルト構築でき、かつそのデフォルトコンストラクタが例外を投げないか調べる (class template) C++11
is_nothrow_copy_constructible 型がコピー構築でき、かつそのコピーコンストラクタが例外を投げないか調べる (class template) C++11
is_nothrow_move_constructible 型がムーブ構築でき、かつそのムーブコンストラクタが例外を投げないか調べる (class template) C++11
is_nothrow_assignable 型の代入演算子呼び出しが適格であり、かつその代入演算子が例外を投げないか調べる (class template) C++11
is_nothrow_copy_assignable 型がコピー代入でき、かつそのコピー代入演算子が例外を投げないか調べる (class template) C++11
is_nothrow_move_assignable 型がムーブ代入でき、かつそのムーブ代入演算子が例外を投げないか調べる (class template) C++11
is_nothrow_destructible 型が破棄でき、かつそのデストラクタが例外を投げないか調べる (class template) C++11
has_virtual_destructor 型が仮想デストラクタを持っているか調べる (class template) C++11
is_swappable_with ある型とほかの型の値とがswap関数で入れ替え可能かを調べる (class template) C++17
is_swappable ある型の値がswap関数で入れ替え可能かを調べる (class template) C++17
is_nothrow_swappable_with ある型とほかの型の値とが例外を投げずにswap関数で入れ替え可能かを調べる (class template) C++17
is_nothrow_swappable ある型の値が例外を投げずにswap関数で入れ替え可能かを調べる (class template) C++17
has_unique_object_representations ある型のバイト表現をそのままハッシュとして利用できるかを調べる (class template) C++17

型の特性についての問い合わせ

名前 説明 対応バージョン
alignment_of 型のアライメントを取得する (class template) C++11
rank 配列型の次元数を取得する (class template) C++11
extent 配列型のi番目の次元の要素数を取得する (class template) C++11

型の関係

名前 説明 対応バージョン
is_same 二つの型が同じ型か調べる (class template) C++11
is_base_of ある型が別の型の基底クラスか調べる (class template) C++11
is_convertible ある型から別の型へ変換可能か調べる (class template) C++11
is_nothrow_convertible ある型から別の型へ、例外を投げずに変換可能か調べる (class template) C++20
is_layout_compatible 2つの型にレイアウト互換があるかを判定する (class template) C++20
is_pointer_interconvertible_base_of 基底クラスと派生クラスの間でポインタ相互交換可能かを判定する (class template) C++20
reference_constructs_from_temporary 参照が一時オブジェクトを直接初期化(丸カッコによる初期化)で束縛した時、一時オブジェクトの寿命が延長されているかを判定する (class template) C++23
reference_converts_from_temporary 参照が一時オブジェクトをコピー初期化(代入形式による初期化)で束縛した時、一時オブジェクトの寿命が延長されているかを判定する (class template) C++23

const-volatile の変更

名前 説明 対応バージョン
remove_const 型のconst修飾を除去する (class template) C++11
remove_volatile 型のvolatile修飾を除去する (class template) C++11
remove_cv 型のconst-volatile修飾を除去する (class template) C++11
add_const 型をconst修飾する (class template) C++11
add_volatile 型をvolatile修飾する (class template) C++11
add_cv 型をconst-volatile修飾する (class template) C++11

参照の変更

名前 説明 対応バージョン
remove_reference 型から参照を除去する(class template) C++11
add_lvalue_reference 型に左辺値参照を追加する (class template) C++11
add_rvalue_reference 型に右辺値参照を追加する (class template) C++11

符号の変更

名前 説明 対応バージョン
make_signed 整数型を符号付きにする (class template) C++11
make_unsigned 整数型を符号なしにする (class template) C++11

配列の変更

名前 説明 対応バージョン
remove_extent 配列型から次元を除去する (class template) C++11
remove_all_extents 配列型から全ての次元を除去する (class template) C++11

ポインタの変更

名前 説明 対応バージョン
add_pointer 型にポインタを追加する (class template) C++11
remove_pointer 型からポインタを除去する (class template) C++11

関数呼び出しに関連した特性

名前 説明 対応バージョン
is_invocable 関数呼び出し可能かを調べる (class template) C++17
is_invocable_r 関数呼び出し可能でその戻り値型がある型へ変換可能かを調べる (class template) C++17
is_nothrow_invocable 例外を投げずに関数呼び出し可能かを調べる (class template) C++17
is_nothrow_invocable_r 例外を投げずに関数呼び出し可能でその戻り値型がある型へ変換可能かを調べる (class template) C++17

その他の変換

名前 説明 対応バージョン
type_identity 受け取った型を返す (class template) C++20
aligned_storage アライメント調整された領域を作る (class template) C++11
C++23で非推奨
aligned_union アライメント調整された共用体領域を作る (class template) C++11
C++23で非推奨
remove_cvref 型のconst-volatile修飾と参照を除去する (class template) C++20
decay 配列と関数ポインタに関して、関数テンプレートと同様に推論された型を取得する (class template) C++11
enable_if コンパイル時条件式が真の場合のみ有効な型 (class template) C++11
conditional コンパイル時条件式 (class template) C++11
common_type 変換可能な共通の型を取得する (class template) C++11
void_t 任意の型をvoidへ変換する (type-alias) C++17
basic_common_reference common_referenceへアダプトする (class template) C++20
common_reference 共通の参照型を取得する (class template) C++20
underlying_type 列挙型の基底型を取得する (class template) C++11
result_of 関数の戻り値の型を取得する (class template) C++11
invoke_result 関数の戻り値の型を取得する (class template) C++17
unwrap_reference reference_wrapper<T>型をT&型に展開する (class template) C++20
unwrap_ref_decay reference_wrapper<T>型をT&型に展開し、型推論規則による型変換を行う (class template) C++20

論理演算

名前 説明 対応バージョン
conjunction 特性の論理積を求める (class template) C++17
disjunction 特性の論理和を求める (class template) C++17
negation 特性の論理否定を求める (class template) C++17

メンバの関係性

名前 説明 対応バージョン
is_pointer_interconvertible_with_class メンバポインタとクラスの間でポインタ相互交換可能かを判定する C++20
is_corresponding_member 2つのメンバポインタが互換な共通位置にあるかを判定する C++20

コンパイル時評価

名前 説明 対応バージョン
is_constant_evaluated 呼び出された時、その呼び出しがコンパイル時に行われているかを判定する C++20

備考

バージョン

言語

  • C++11

参照