<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 |
備考
- このヘッダで定義されるテンプレートは、
std::common_type
、std::basic_common_reference
を除いて、ユーザーが特殊化を追加することを禁止している
バージョン
言語
- C++11
参照
- N1345 A Proposal to add Type Traits to the Standard Library
- N1424 A Proposal to add Type Traits to the Standard Library
- Boost Type Traits Library
- 型特性 - Boost逆引きリファレンス
- LWG Issue 2581. Specialization of
<type_traits>
variable templates should be prohibited- C++14までは
<type_traits>
で定義されるクラステンプレートの特殊化を禁止していたが、C++17で定義される変数テンプレートも特殊化の禁止対象とされた
- C++14までは
- P1413R3 Deprecate
std::aligned_storage
andstd::aligned_union