<type_traits>

型引数のプロパティに関する情報を提供する、または変換された型を生成する、コンパイル時定数のテンプレートを定義します。

構文

#include <type_traits>

解説

<type_traits> のクラスとテンプレートは、コンパイル時に型の推論、分類、および変換をサポートするために使用されます。 また、型に関連するエラーを検出し、汎用コードを最適化するためにも使用されます。 単項型の特徴では、型のプロパティ、バイナリ型の特徴によって型の間のリレーションシップ、および変換の特徴によって型のプロパティが変更されます。

ヘルパー クラス integral_constant とそのテンプレート特殊化 true_typefalse_type が、型の述語の基底クラスを形成します。 型の述語は、1 つ以上の型引数を受け取るテンプレートです。 型の述語が true を保持する場合は、true_type からパブリックに (直接または間接的に) 派生されます。 型の述語が false を保持する場合は、false_type からパブリックに (直接または間接的に) 派生されます。

型修飾子または変換の特徴は、1 つ以上のテンプレート引数を受け取り、変更された型のシノニムである 1 つのメンバー、type を持つテンプレートです。

エイリアス テンプレート

型の特徴の式を簡略化するために、typename some_trait<T>::typeエイリアス テンプレートが提供されます。ここで、some_trait はクラス テンプレート名です。 たとえば、add_const には、その型 add_const_t のエイリアス テンプレートがあり、次のように定義されています。

template <class T>
using add_const_t = typename add_const<T>::type;

これらは、type メンバーの指定されたエイリアスです。

add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t\

common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t\

remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t\

クラス

ヘルパー クラスと typedef

名前 説明
integral_constant 型および値から整数定数を作成します。
true_type true 値を持つ整数定数を保持します。
false_type false 値を持つ整数定数を保持します。

主な型のカテゴリ

名前 説明
is_void 型が void であるかどうかをテストします。
is_null_pointer 型が std::nullptr_t であるかどうかをテストします。
is_integral 型が整数型であるかどうかをテストします。
is_floating_point 型が浮動小数点型であるかどうかをテストします。
is_array 型が配列型であるかどうかをテストします。
is_pointer 型がポインターであるかどうかをテストします。
is_lvalue_reference 型が左辺値参照かどうかをテストします。
is_rvalue_reference 型が右辺値参照かどうかをテストします。
is_member_object_pointer 型がメンバー オブジェクトへのポインターであるかどうかをテストします。
is_member_function_pointer 型がメンバー関数へのポインターであるかどうかをテストします。
is_enum 型が列挙型であるかどうかをテストします。
is_union 型が共用体であるかどうかをテストします。
is_class 型がクラスであるかどうかをテストします。
is_function 型が関数型であるかどうかをテストします。

複合型のカテゴリ

名前 説明
is_reference 型が参照であるかどうかをテストします。
is_arithmetic 型が演算型であるかどうかをテストします。
is_fundamental 型が void または演算型であるかどうかをテストします。
is_object 型がオブジェクト型であるかどうかをテストします。
is_scalar 型がスカラーであるかどうかをテストします。
is_compound 型が非スカラーであるかどうかをテストします。
is_member_pointer 型がメンバーへのポインターであるかどうかをテストします。

型のプロパティ

名前 説明
is_const 型が const であるかどうかをテストします。
is_volatile 型が volatile であるかどうかをテストします。
is_trivial 型が単純であるかどうかをテストします。
is_trivially_copyable 型が普通にコピー可能であるかどうかをテストします。
is_standard_layout 型が標準レイアウト型であるかどうかをテストします。
is_pod 型が POD であるかどうかをテストします。
is_literal_type 型が、constexpr 変数にしたり、constexpr 関数で使用したりできるかどうかをテストします。
is_empty 型が空のクラスであるかどうかをテストします。
is_polymorphic 型がポリモーフィックなクラスであるかどうかをテストします。
is_abstract 型が抽象クラスであるかどうかをテストします。
is_final 型が final とマークされるクラス型であるかどうかをテストします。
is_aggregate
is_signed 型が符号付き整数であるかどうかをテストします。
is_unsigned 型が符号なし整数であるかどうかをテストします。
is_constructible 型が、指定された引数の型を使用して構築できるかどうかをテストします。
is_default_constructible 型に既定コンストラクターが存在するかどうかをテストします。
is_copy_constructible 型にコピー コンストラクターが存在するかどうかをテストします。
is_move_constructible 型に移動コンストラクターが存在するかどうかをテストします。
is_assignable 最初の型に 2 番目の型の値を割り当てることができるかどうかをテストします。
is_copy_assignable 型に、その型の const 参照値を割り当てることができるかどうかをテストします。
is_move_assignable 型に、その型の rvalue 参照を割り当てることができるかどうかをテストします。
is_swappable
is_swappable_with
is_destructible 型が破棄可能かどうかをテストします。
is_trivially_constructible 型が、指定された型を使用して作成されるときに、重要な操作を使用しないかどうかをテストします。
is_trivially_default_constructible 型が、既定で作成されるときに、重要な操作を使用しないかどうかをテストします。
is_trivially_copy_constructible 型が、コピーで作成されるときに、重要な操作を使用しないかどうかをテストします。
is_trivially_move_constructible 型が、移動で作成されるときに、重要な操作を使用しないかどうかをテストします。
is_trivially_assignable 型が割り当て可能で、かつ割り当てで重要な操作を使用しないかどうかをテストします。
is_trivially_copy_assignable 型が、コピー割り当て可能で、かつ割り当てで重要な操作を使用しないかどうかをテストします。
is_trivially_move_assignable 型が、移動で割り当て可能で、かつ割り当てで重要な操作を使用しないかどうかをテストします。
is_trivially_destructible 型が破棄可能で、かつデストラクターが重要な操作を使用しないかどうかをテストします。
is_nothrow_constructible 型が構築可能で、指定された型を使用して構築されたときにスローしないと判明しているかどうかをテストします。
is_nothrow_default_constructible 型が、既定で構築可能で、既定で構築されたときにスローしないと判明しているかどうかをテストします。
is_nothrow_copy_constructible 型が、コピーで構築可能で、コピー コンストラクターがスローしないと判明しているかどうかをテストします。
is_nothrow_move_constructible 型が、移動で構築可能で、移動コンストラクターがスローしないと判明しているかどうかをテストします。
is_nothrow_assignable 型が、指定された型を使用して割り当て可能で、割り当てがスローしないと判明しているかどうかをテストします。
is_nothrow_copy_assignable 型が、コピーで割り当て可能で、割り当てがスローしないと判明しているかどうかをテストします。
is_nothrow_move_assignable 型が、移動で割り当て可能で、割り当てがスローしないと判明しているかどうかをテストします。
is_nothrow_swappable
is_nothrow_swappable_with
is_nothrow_destructible 型が破棄可能で、デストラクターがスローしないと判明しているかどうかをテストします。
has_virtual_destructor 型に仮想デストラクターが存在するかどうかをテストします。
has_unique_object_representations
is_invocable 指定した引数の型を使用して呼び出し可能な型を呼び出すことができるかどうかをテストします。
C++17 で追加されました。
is_invocable_r 指定した引数型を使用して呼び出し可能な型を呼び出すことができるかどうか、および結果が指定した型に変換できるかどうかをテストします。
C++17 で追加されました。
is_nothrow_invocable 指定した引数型を使用して呼び出し可能な型を呼び出すことができるかどうか、および例外をスローしないかどうかが確認されます。
C++17 で追加されました。
is_nothrow_invocable_r 指定した引数の型を使用して呼び出し可能な型を呼び出すことができるかどうかをテストします。また、例外をスローしないかどうかが確認され、結果は指定した型に変換できます。
C++17 で追加されました。

型プロパティのクエリ

名前 説明
alignment_of 型のアラインメントを取得します。
rank 配列の次元数を取得します。
extent 指定した次元にある要素の数を取得します。

型の関係

名前 説明
is_same 2 つの型が等しいかどうかをテストします。
is_base_of 一方の型がもう一方の型に基づいているかどうかをテストします。
is_convertible 一方の型をもう一方の型に変換できるかどうかをテストします。

const/volatile の変更

名前 説明
add_const 型から const 型を生成します。
add_volatile 型から volatile 型を生成します。
add_cv 型から const volatile 型を生成します。
remove_const 型から非 const 型を生成します。
remove_volatile 型から非 volatile 型を生成します。
remove_cv 型から非 const の非 volatile 型を生成します。

参照の変更

名前 説明
add_lvalue_reference 型から型への参照を生成します。
add_rvalue_reference 型から型への rvalue 参照を生成します。
remove_reference 型から非参照型を生成します。

符号の変更

名前 説明
make_signed 符号付きの場合は型を生成し、サイズが型以上の型または最小の符号付きの型を生成します。
make_unsigned 符号なしの場合は型を生成し、サイズが型以上の型または最小の符号なしの型を生成します。

配列の変更

名前 説明
remove_all_extents 配列型から非配列型を生成します。
remove_extent 配列型から要素型を生成します。

ポインターの変更

名前 説明
add_pointer 型から型へのポインターを生成します。
remove_pointer 型へのポインターから型を生成します。

その他の変換

名前 説明
aligned_storage 整列された型の初期化されていないメモリを割り当てます。
aligned_union 重要なコンストラクターまたはデストラクターを含む整列された共用体の初期化されていないメモリを割り当てます。
common_type パラメーター パックのすべての型の共通の型を生成します。
conditional 条件が true の場合は、最初に指定された型が生成され、それ以外の場合、2 番目に指定された型になります。
decay 値で渡された型を生成します。 非参照、非定数、非揮発の型、または型へのポインターを作成します。
enable_if 条件が true の場合は、指定された型が生成され、それ以外の場合、型は生成されません。
invoke_result 指定された引数型を受け取る呼び出し可能型の戻り値の型を決定します。
C++17 で追加されました。
result_of 指定された引数型を受け取る呼び出し可能型の戻り値の型を決定します。
C++ 14 で追加され、C++17 で非推奨となりました。
underlying_type 列挙型の基になる整数型を生成します。

論理演算子の特徴

名前 説明
接続詞
論理和
否定

関連項目

<functional>