<type_traits>
型引数のプロパティに関する情報を提供する、または変換された型を生成する、コンパイル時定数のテンプレートを定義します。
構文
#include <type_traits>
解説
<type_traits> のクラスとテンプレートは、コンパイル時に型の推論、分類、および変換をサポートするために使用されます。 また、型に関連するエラーを検出し、汎用コードを最適化するためにも使用されます。 単項型の特徴では、型のプロパティ、バイナリ型の特徴によって型の間のリレーションシップ、および変換の特徴によって型のプロパティが変更されます。
ヘルパー クラス integral_constant
とそのテンプレート特殊化 true_type
と false_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 | 列挙型の基になる整数型を生成します。 |
論理演算子の特徴
名前 | 説明 |
---|---|
接続詞 | |
論理和 | |
否定 |