C++ STL メタ関数一覧

C++のSTLメタ関数の一覧です。現時点のプレビュー版であるC++20を基準に作成しています。

| 対象                                           | 判別                               | 追加・変換 | 削除 |
| ---------------------------------------------- | ---------------------------------- | ---- | ---- |
| void                                           | is_void                            | void_t |      |
| nullptr                                        | is_null_pointer                    |      |      |
| 単純型                                         | is_fundamental                     |      |      |
| 算術型                                         | is_arithmetic                      |      |      |
| 符号付き算術型                                 | is_signed                          | make_signed<br />make_signed_t |      |
| 符号無し算術型                                 | is_unsigned                        | make_unsigned<br />make_unsigned_t |      |
| 整数型                                         | is_integral                        |      |      |
| 浮動小数点型                                   | is_floating_point                  |      |      |
| 配列                                           | is_array                           |      |      |
| 要素数既知の配列                               | is_bounded_array                   |      |      |
| 要素数未知の配列                               | is_unbounded_array                 |      |      |
| ポインタ型                                     | is_pointer                         | add_pointer<br />add_pointer_t | remove_pointer<br />remove_pointer_t |
| 参照&CV |  |  | remove_cvref<br />remove_cvref_t |
| 参照型                                         | is_reference                       |      | remove_reference<br />remove_reference_t |
| 左辺値参照型                                   | is_lvalue_reference                | add_lvalue_reference<br />add_lvalue_reference_t |      |
| 右辺値参照型                                   | is_rvalue_reference                | add_rvalue_reference<br />add_rvalue_reference_t |      |
| メンバポインタ型                               | is_member_pointer                  |      |      |
| データメンバへのポインタ                       | is_member_object_pointer           |      |      |
| メンバ関数へのポインタ                         | is_member_function_pointer         |      |      |
| 列挙型                                         | is_enum                            |      |      |
| 共用型                                         | is_union                           |      |      |
| クラス型                                       | is_class                           |      |      |
| 関数型                                         | is_function                        |      |      |
| オブジェクト型                                 | is_object                          |      |      |
| スカラ型                                       | is_scalar                          |      |      |
| 複合型                                         | is_compound                        |      |      |
| const&volatile |  | add_cv<br />add_cv_t | remove_cv<br />remove_cv_t |
| const                                    | is_const                           | add_const<br />add_const_t | remove_const<br />remove_const_t |
| volatile                                 | is_volatile                        | add_volatile<br />add_volatile_t | remove_volatile<br />remove_volatile_t |
| トリビアル型                                   | is_trivial                         |      |      |
| トリビアルコピー可能                           | is_trivially_copyable              |      |      |
| スタンダードレイアウト型                       | is_standard_layout                 |      |      |
| POD型[^pod]                                   | is_pod                             |      |      |
| リテラル型                            | (is_literal_type) (～C++17)      |      |      |
| 空                                             | is_empty                           |      |      |
| 多層的クラス                                   | is_polymorphic                     |      |      |
| 抽象クラス                                     | is_abstract                        |      |      |
| final修飾型                                    | is_final                           |      |      |
| 集成体                                         | is_aggregate                       |      |      |
| コンストラクタ呼び出し可能                     | is_constructible                   |      |      |
| デフォルトコンストラクタ呼び出し可能           | is_default_constructible           |      |      |
| コピーコンストラクタ呼び出し可能               | is_copy_constructible              |      |      |
| ムーブコンストラクタ呼び出し可能               | is_move_constructible              |      |      |
| デストラクタ呼び出し可能                       | 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_destructible|||
| 仮想デストラクタを持つ |has_virtual_destructor|||
| 他の型とswap関数可能 |is_swappable_with|||
| swap関数可能 |is_swappable|||
| 例外のない他の型とswap関数可能 |is_nothrow_swappable_with|||
| 例外のないswap関数可能 |is_nothrow_swappable|||
| バイト表現のハッシュ利用可能 |has_unique_object_representations|||
| 同じ型 |is_same|||
| 基底クラス |is_base_of|||
| 別の型へ変換可能 |is_convertible|||
| 別の型へ例外のない変換可能 |is_nothrow_convertible|||
| 関数呼び出し可能 |is_invocable|||
| 関数呼び出しと戻り値の型変換可能 |is_invicable_r|||
| 例外のない関数呼び出し可能 | is_nothrow_invocable               |                                                  |                                          |
| 例外のない関数呼び出しと戻り値の型変換可能     |is_nothrow_invicable_r|||
| コンパイル時呼び出し |is_constant_evaluated|||

表に含まれなかったメタ関数

- integral_constant
- bool_constant
- aligment_of
- rank
- extent
- remove_extent
- remove_all_extents
- conjunction
- disjunction
- negation
- (result_of, result_of_t) (～C++17)
- invoke_result, invoke_result_t (C++17～)
- type_identity, type_identity_t
- aligned_storage
- aligned_union
- decay, decay_t
- enable_if
- conditional
- common_type, common_type_t
- underlying_type, underlying_type_t
- common_reference, common_reference_t
- basic_common_reference, basic_common_reference_t

[^pod]: POD：Plain Old Data

# 参考
[https://cpprefjp.github.io/reference/type_traits.html](https://cpprefjp.github.io/reference/type_traits.html)