Namespaces
Variants

Standard library header <type_traits> (C++11)

From cppreference.net
Standard library headers

このヘッダーは メタプログラミング ライブラリの一部です。

**翻訳結果:** HTMLタグ、属性、` `タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しています。

目次

クラス

ヘルパークラス
指定された型と値を持つコンパイル時定数
(クラステンプレート)
true_type std:: integral_constant < bool , true >
false_type std:: integral_constant < bool , false >
基本型カテゴリ
(C++11)
型が void かどうかをチェックする
(クラステンプレート)
(C++11) ( DR* )
型が std::nullptr_t かどうかをチェックする
(クラステンプレート)
型が整数型かどうかをチェックする
(クラステンプレート)
型が浮動小数点型かどうかをチェックする
(クラステンプレート)
(C++11)
型が配列型かどうかをチェックする
(クラステンプレート)
(C++11)
型が列挙型かどうかをチェックする
(クラステンプレート)
(C++11)
型が共用体型かどうかをチェックする
(クラステンプレート)
(C++11)
型が非共用体クラス型かどうかをチェックする
(クラステンプレート)
型が関数型かどうかをチェックする
(クラステンプレート)
(C++11)
型がポインタ型かどうかをチェックする
(クラステンプレート)
型が lvalue reference かどうかをチェックする
(クラステンプレート)
型が rvalue reference かどうかをチェックする
(クラステンプレート)
型が非静的メンバオブジェクトポインタかどうかをチェックする
(クラステンプレート)
型が非静的メンバ関数ポインタかどうかをチェックする
(クラステンプレート)
複合型カテゴリ
型が基本型かどうかをチェックする
(クラステンプレート)
型が算術型かどうかをチェックする
(クラステンプレート)
(C++11)
型がスカラ型かどうかをチェックする
(クラステンプレート)
(C++11)
型がオブジェクト型かどうかをチェックする
(クラステンプレート)
型が複合型かどうかをチェックする
(クラステンプレート)
型が lvalue reference または rvalue reference のいずれかであるかどうかをチェックする
(クラステンプレート)
型が非静的メンバ関数またはオブジェクトへのポインタであるかどうかをチェックする
(クラステンプレート)
型プロパティ
(C++11)
型がconst修飾されているかどうかをチェックする
(クラステンプレート)
型がvolatile修飾されているかどうかをチェックする
(クラステンプレート)
(C++11) (deprecated in C++26)
型がトリビアルかどうかをチェックする
(クラステンプレート)
型がトリビアルコピー可能かどうかをチェックする
(クラステンプレート)
型が standard-layout 型であるかどうかをチェックする
(クラステンプレート)
(C++11) (deprecated in C++20)
型がプレーンなデータ型(POD)かどうかをチェックする
(クラステンプレート)
(C++11) (C++17で非推奨) (C++20で削除)
リテラル型かどうかをチェックする
(クラステンプレート)
型のオブジェクト表現内のすべてのビットがその値に寄与するかどうかをチェックする
(クラステンプレート)
(C++11)
型がクラス型(ただし共用体を除く)であり、非静的データメンバーを持たないかどうかをチェックする
(クラステンプレート)
型がポリモーフィックなクラス型かどうかをチェックする
(クラステンプレート)
型が抽象クラス型かどうかをチェックする
(クラステンプレート)
(C++14)
型がfinalクラス型かどうかをチェックする
(クラステンプレート)
型が集成体型かどうかをチェックする
(クラステンプレート)
型が暗黙の生存期間型かどうかをチェックする
(クラステンプレート)
(C++11)
型が符号付き算術型かどうかをチェックする
(クラステンプレート)
型が符号なし算術型かどうかをチェックする
(クラステンプレート)
型が既知の境界を持つ配列型かどうかをチェックする
(クラステンプレート)
型が未知の境界を持つ配列型かどうかをチェックする
(クラステンプレート)
型がスコープ付き列挙型かどうかをチェックする
(クラステンプレート)
サポートされている操作
特定の引数に対するコンストラクタが型に存在するかチェックする
(クラステンプレート)
デフォルトコンストラクタが型に存在するかチェックする
(クラステンプレート)
コピーコンストラクタが型に存在するかチェックする
(クラステンプレート)
右辺値参照から構築可能かチェックする
(クラステンプレート)
特定の引数に対する代入演算子が型に存在するかチェックする
(クラステンプレート)
コピー代入演算子が型に存在するかチェックする
(クラステンプレート)
ムーブ代入演算子が型に存在するかチェックする
(クラステンプレート)
削除されていないデストラクタが型に存在するかチェックする
(クラステンプレート)
仮想デストラクタが型に存在するかチェックする
(クラステンプレート)
同じ型または異なる型のオブジェクトと交換可能かチェックする
(クラステンプレート)
コピー初期化で参照が一時オブジェクトにバインドされるかチェックする
(クラステンプレート)
直接初期化で参照が一時オブジェクトにバインドされるかチェックする
(クラステンプレート)
プロパティクエリ
型のアライメント要件を取得する
(クラステンプレート)
(C++11)
配列型の次元数を取得する
(クラステンプレート)
(C++11)
指定された次元に沿った配列型のサイズを取得する
(クラステンプレート)
型の関係性
(C++11)
2つの型が同じかどうかをチェックする
(クラステンプレート)
(C++11)
ある型が別の型の基底クラスであるかどうかをチェックする
(クラステンプレート)
ある型が別の型の仮想基底クラスであるかどうかをチェックする
(クラステンプレート)
型が他の型に変換可能かどうかをチェックする
(クラステンプレート)
2つの型が layout-compatible であるかどうかをチェックする
(クラステンプレート)
ある型が別の型の ポインター相互変換可能 (初期)基底クラスであるかどうかをチェックする
(クラステンプレート)
型が指定された引数型で呼び出し可能か( std::invoke によって呼び出されるかのように)チェックする
(クラステンプレート)
Const-volatility 指定子
指定された型から const および/または volatile 指定子を除去する
(クラステンプレート)
(C++11) (C++11) (C++11)
指定された型に const および/または volatile 指定子を追加する
(クラステンプレート)
参考文献
指定された型から参照を除去する
(クラステンプレート)
指定された型に lvalue または rvalue 参照を追加する
(クラステンプレート)
ポインタ
指定された型からポインタを除去する
(クラステンプレート)
指定された型にポインタを追加する
(クラステンプレート)
符号修飾子
指定された整数型に対応する符号付き型を取得する
(クラステンプレート)
指定された整数型に対応する符号なし型を取得する
(クラステンプレート)
配列
指定された配列型から1つの次元を除去する
(クラステンプレート)
指定された配列型から全ての次元を除去する
(クラステンプレート)
その他の変換
(C++11以降) (C++23で非推奨)
指定されたサイズの型のための未初期化ストレージとして使用するのに適した型を定義する
(クラステンプレート)
(C++11以降) (C++23で非推奨)
指定された全ての型のための未初期化ストレージとして使用するのに適した型を定義する
(クラステンプレート)
(C++11)
関数引数を値渡しする場合と同様の型変換を適用する
(class template)
std::remove_cv std::remove_reference を組み合わせる
(クラステンプレート)
(C++11)
条件付きで 削除する 関数オーバーロードまたはテンプレート特殊化をオーバーロード解決から
(クラステンプレート)
コンパイル時の真偽値に基づいて一方の型または他方の型を選択する
(クラステンプレート)
型のグループの共通型を決定する
(クラステンプレート)
型のグループの共通参照型を決定する
(クラステンプレート)
指定された列挙型の基盤となる整数型を取得する
(クラステンプレート)
(C++11) (removed in C++20) (C++17)
呼び出し可能オブジェクトを引数のセットで呼び出した結果の型を推論する
(クラステンプレート)
(C++17)
void可変長エイリアステンプレート
(エイリアステンプレート)
型引数を変更せずに返す
(クラステンプレート)
std::reference_wrapper でラップされた参照型を取得する
(クラステンプレート)
Traitsに対する操作
可変長論理積メタ関数
(クラステンプレート)
可変長論理ORメタ関数
(クラステンプレート)
(C++17)
論理NOTメタ関数
(クラステンプレート)

関数

メンバー関係
指定された型のオブジェクトが、その型の特定のサブオブジェクトと pointer-interconvertible であるかどうかをチェックする
(関数テンプレート)
2つの指定された型の共通先頭部分列において、2つの指定されたメンバが互いに対応するかどうかをチェックする
(関数テンプレート)
定数評価コンテキスト
定数評価コンテキスト内で呼び出しが発生しているかどうかを検出する
(関数)
ポインタがオブジェクトの生存期間内にあるかどうかをコンパイル時にチェックする
(function)

概要

namespace std {
  // ヘルパークラス
  template<class T, T v> struct integral_constant;
  template<bool B>
    using bool_constant = integral_constant<bool, B>;
  using true_type  = bool_constant<true>;
  using false_type = bool_constant<false>;
  // 基本型カテゴリ
  template<class T> struct is_void;
  template<class T> struct is_null_pointer;
  template<class T> struct is_integral;
  template<class T> struct is_floating_point;
  template<class T> struct is_array;
  template<class T> struct is_pointer;
  template<class T> struct is_lvalue_reference;
  template<class T> struct is_rvalue_reference;
  template<class T> struct is_member_object_pointer;
  template<class T> struct is_member_function_pointer;
  template<class T> struct is_enum;
  template<class T> struct is_union;
  template<class T> struct is_class;
  template<class T> struct is_function;
  // 複合型カテゴリ
  template<class T> struct is_reference;
  template<class T> struct is_arithmetic;
  template<class T> struct is_fundamental;
  template<class T> struct is_object;
  template<class T> struct is_scalar;
  template<class T> struct is_compound;
  template<class T> struct is_member_pointer;
  // 型プロパティ
  template<class T> struct is_const;
  template<class T> struct is_volatile;
  template<class T> struct is_trivial;
  template<class T> struct is_trivially_copyable;
  template<class T> struct is_standard_layout;
  template<class T> struct is_empty;
  template<class T> struct is_polymorphic;
  template<class T> struct is_abstract;
  template<class T> struct is_final;
  template<class T> struct is_aggregate;
  template<class T> struct is_signed;
  template<class T> struct is_unsigned;
  template<class T> struct is_bounded_array;
  template<class T> struct is_unbounded_array;
  template<class T> struct is_scoped_enum;
  template<class T, class... Args> struct is_constructible;
  template<class T> struct is_default_constructible;
  template<class T> struct is_copy_constructible;
  template<class T> struct is_move_constructible;
  template<class T, class U> struct is_assignable;
  template<class T> struct is_copy_assignable;
  template<class T> struct is_move_assignable;
  template<class T, class U> struct is_swappable_with;
  template<class T> struct is_swappable;
  template<class T> struct is_destructible;
  template<class T, class... Args> struct is_trivially_constructible;
  template<class T> struct is_trivially_default_constructible;
  template<class T> struct is_trivially_copy_constructible;
  template<class T> struct is_trivially_move_constructible;
  template<class T, class U> struct is_trivially_assignable;
  template<class T> struct is_trivially_copy_assignable;
  template<class T> struct is_trivially_move_assignable;
  template<class T> struct is_trivially_destructible;
  template<class T, class... Args> struct is_nothrow_constructible;
  template<class T> struct is_nothrow_default_constructible;
  template<class T> struct is_nothrow_copy_constructible;
  template<class T> struct is_nothrow_move_constructible;
  template<class T, class U> struct is_nothrow_assignable;
  template<class T> struct is_nothrow_copy_assignable;
  template<class T> struct is_nothrow_move_assignable;
  template<class T, class U> struct is_nothrow_swappable_with;
  template<class T> struct is_nothrow_swappable;
  template<class T> struct is_nothrow_destructible;
  template<class T> struct has_virtual_destructor;
  template<class T> struct has_unique_object_representations;
  template<class T, class U> struct reference_constructs_from_temporary;
  template<class T, class U> struct reference_converts_from_temporary;
  // 型プロパティクエリ
  template<class T> struct alignment_of;
  template<class T> struct rank;
  template<class T, unsigned I = 0> struct extent;
  // 型関係
  template<class T, class U> struct is_same;
  template<class Base, class Derived> struct is_base_of;
  template<class Base, class Derived> struct is_virtual_base_of;
  template<class From, class To> struct is_convertible;
  template<class From, class To> struct is_nothrow_convertible;
  template<class T, class U> struct is_layout_compatible;
  template<class Base, class Derived> struct is_pointer_interconvertible_base_of;
  template<class Fn, class... ArgTypes> struct is_invocable;
  template<class R, class Fn, class... ArgTypes> struct is_invocable_r;
  template<class Fn, class... ArgTypes> struct is_nothrow_invocable;
  template<class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;
  // const-volatile 修飾
  template<class T> struct remove_const;
  template<class T> struct remove_volatile;
  template<class T> struct remove_cv;
  template<class T> struct add_const;
  template<class T> struct add_volatile;
  template<class T> struct add_cv;
  template<class T>
    using remove_const_t    = typename remove_const<T>::type;
  template<class T>
    using remove_volatile_t = typename remove_volatile<T>::type;
  template<class T>
    using remove_cv_t       = typename remove_cv<T>::type;
  template<class T>
    using add_const_t       = typename add_const<T>::type;
  template<class T>
    using add_volatile_t    = typename add_volatile<T>::type;
  template<class T>
    using add_cv_t          = typename add_cv<T>::type;
  // 参照の変更
  template<class T> struct remove_reference;
  template<class T> struct add_lvalue_reference;
  template<class T> struct add_rvalue_reference;
  template<class T>
    using remove_reference_t     = typename remove_reference<T>::type;
  template<class T>
    using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;
  template<class T>
    using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
  // 符号の変更
  template<class T> struct make_signed;
  template<class T> struct make_unsigned;
  template<class T>
    using make_signed_t   = typename make_signed<T>::type;
  template<class T>
    using make_unsigned_t = typename make_unsigned<T>::type;
  // 配列の変更
  template<class T> struct remove_extent;
  template<class T> struct remove_all_extents;
  template<class T>
    using remove_extent_t      = typename remove_extent<T>::type;
  template<class T>
    using remove_all_extents_t = typename remove_all_extents<T>::type;
  // ポインタの変更
  template<class T> struct remove_pointer;
  template<class T> struct add_pointer;
  template<class T>
    using remove_pointer_t = typename remove_pointer<T>::type;
  template<class T>
    using add_pointer_t    = typename add_pointer<T>::type;
  // その他の変換
  template<class T> struct type_identity;
  template<class T> struct remove_cvref;
  template<class T> struct decay;
  template<bool, class T = void> struct enable_if;
  template<bool, class T, class F> struct conditional;
  template<class... T> struct common_type;
  template<class T, class U, template<class> class TQual, template<class> class UQual>
    struct basic_common_reference { };
  template<class... T> struct common_reference;
  template<class T> struct underlying_type;
  template<class Fn, class... ArgTypes> struct invoke_result;
  template<class T> struct unwrap_reference;
  template<class T> struct unwrap_ref_decay;
  template<class T>
    using type_identity_t    = typename type_identity<T>::type;
  template<class T>
    using remove_cvref_t     = typename remove_cvref<T>::type;
  template<class T>
    using decay_t            = typename decay<T>::type;
  template<bool b, class T = void>
    using enable_if_t        = typename enable_if<b, T>::type;
  template<bool b, class T, class F>
    using conditional_t      = typename conditional<b, T, F>::type;
  template<class... T>
    using common_type_t      = typename common_type<T...>::type;
  template<class... T>
    using common_reference_t = typename common_reference<T...>::type;
  template<class T>
    using underlying_type_t  = typename underlying_type<T>::type;
  template<class Fn, class... ArgTypes>
    using invoke_result_t    = typename invoke_result<Fn, ArgTypes...>::type;
  template<class T>
    using unwrap_reference_t = typename unwrap_reference<T>::type;
  template<class T>
    using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
  template<class...>
    using void_t             = void;
  // 論理演算子の特性
  template<class... B> struct conjunction;
  template<class... B> struct disjunction;
  template<class B> struct negation;
  // 基本型カテゴリ
  template<class T>
    inline constexpr bool is_void_v = is_void<T>::value;
  template<class T>
    inline constexpr bool is_null_pointer_v = is_null_pointer<T>::value;
  template<class T>
    inline constexpr bool is_integral_v = is_integral<T>::value;
  template<class T>
    inline constexpr bool is_floating_point_v = is_floating_point<T>::value;
  template<class T>
    inline constexpr bool is_array_v = is_array<T>::value;
  template<class T>
    inline constexpr bool is_pointer_v = is_pointer<T>::value;
  template<class T>
    inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::value;
  template<class T>
    inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::value;
  template<class T>
    inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::value;
  template<class T>
    inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::value;
  template<class T>
    inline constexpr bool is_enum_v = is_enum<T>::value;
  template<class T>
    inline constexpr bool is_union_v = is_union<T>::value;
  template<class T>
    inline constexpr bool is_class_v = is_class<T>::value;
  template<class T>
    inline constexpr bool is_function_v = is_function<T>::value;
  // 複合型カテゴリ
  template<class T>
    inline constexpr bool is_reference_v = is_reference<T>::value;
  template<class T>
    inline constexpr bool is_arithmetic_v = is_arithmetic<T>::value;
  template<class T>
    inline constexpr bool is_fundamental_v = is_fundamental<T>::value;
  template<class T>
    inline constexpr bool is_object_v = is_object<T>::value;
  template<class T>
    inline constexpr bool is_scalar_v = is_scalar<T>::value;
  template<class T>
    inline constexpr bool is_compound_v = is_compound<T>::value;
  template<class T>
    inline constexpr bool is_member_pointer_v = is_member_pointer<T>::value;
  // 型プロパティ
  template<class T>
    inline constexpr bool is_const_v = is_const<T>::value;
  template<class T>
    inline constexpr bool is_volatile_v = is_volatile<T>::value;
  template<class T>
    inline constexpr bool is_trivial_v = is_trivial<T>::value;
  template<class T>
    inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::value;
  template<class T>
    inline constexpr bool is_standard_layout_v = is_standard_layout<T>::value;
  template<class T>
    inline constexpr bool is_empty_v = is_empty<T>::value;
  template<class T>
    inline constexpr bool is_polymorphic_v = is_polymorphic<T>::value;
  template<class T>
    inline constexpr bool is_abstract_v = is_abstract<T>::value;
  template<class T>
    inline constexpr bool is_final_v = is_final<T>::value;
  template<class T>
    inline constexpr bool is_aggregate_v = is_aggregate<T>::value;
  template<class T>
    inline constexpr bool is_signed_v = is_signed<T>::value;
  template<class T>
    inline constexpr bool is_unsigned_v = is_unsigned<T>::value;
  template<class T>
    inline constexpr bool is_bounded_array_v = is_bounded_array<T>::value;
  template<class T>
    inline constexpr bool is_unbounded_array_v = is_unbounded_array<T>::value;
  template<class T>
    inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
  template<class T, class... Args>
    inline constexpr bool is_constructible_v = is_constructible<T, Args...>::value;
  template<class T>
    inline constexpr bool is_default_constructible_v = is_default_constructible<T>::value;
  template<class T>
    inline constexpr bool is_copy_constructible_v = is_copy_constructible<T>::value;
  template<class T>
    inline constexpr bool is_move_constructible_v = is_move_constructible<T>::value;
  template<class T, class U>
    inline constexpr bool is_assignable_v = is_assignable<T, U>::value;
  template<class T>
    inline constexpr bool is_copy_assignable_v = is_copy_assignable<T>::value;
  template<class T>
    inline constexpr bool is_move_assignable_v = is_move_assignable<T>::value;
  template<class T, class U>
    inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
  template<class T>
    inline constexpr bool is_swappable_v = is_swappable<T>::value;
  template<class T>
    inline constexpr bool is_destructible_v = is_destructible<T>::value;
  template<class T, class... Args>
    inline constexpr bool is_trivially_constructible_v
      = is_trivially_constructible<T, Args...>::value;
  template<class T>
    inline constexpr bool is_trivially_default_constructible_v
      = is_trivially_default_constructible<T>::value;
  template<class T>
    inline constexpr bool is_trivially_copy_constructible_v
      = is_trivially_copy_constructible<T>::value;
  template<class T>
    inline constexpr bool is_trivially_move_constructible_v
      = is_trivially_move_constructible<T>::value;
  template<class T, class U>
    inline constexpr bool is_trivially_assignable_v = is_trivially_assignable<T, U>::value;
  template<class T>
    inline constexpr bool is_trivially_copy_assignable_v
      = is_trivially_copy_assignable<T>::value;
  template<class T>
    inline constexpr bool is_trivially_move_assignable_v
      = is_trivially_move_assignable<T>::value;
  template<class T>
    inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::value;
  template<class T, class... Args>
    inline constexpr bool is_nothrow_constructible_v
      = is_nothrow_constructible<T, Args...>::value;
  template<class T>
    inline constexpr bool is_nothrow_default_constructible_v
      = is_nothrow_default_constructible<T>::value;
  template<class T>
    inline constexpr bool is_nothrow_copy_constructible_v
      = is_nothrow_copy_constructible<T>::value;
  template<class T>
    inline constexpr bool is_nothrow_move_constructible_v
      = is_nothrow_move_constructible<T>::value;
  template<class T, class U>
    inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::value;
  template<class T>
    inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::value;
  template<class T>
    inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::value;
  template<class T, class U>
    inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;
  template<class T>
    inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;
  template<class T>
    inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;
  template<class T>
    inline constexpr bool has_virtual_destructor_v = has_virtual_destructor<T>::value;
  template<class T>
    inline constexpr bool has_unique_object_representations_v
      = has_unique_object_representations<T>::value;
  template<class T, class U>
    inline constexpr bool reference_constructs_from_temporary_v
      = reference_constructs_from_temporary<T, U>::value;
  template<class T, class U>
    inline constexpr bool reference_converts_from_temporary_v
      = reference_converts_from_temporary<T, U>::value;
  // 型プロパティクエリ
  template<class T>
    inline constexpr size_t alignment_of_v = alignment_of<T>::value;
  template<class T>
    inline constexpr size_t rank_v = rank<T>::value;
  template<class T, unsigned I = 0>
    inline constexpr size_t extent_v = extent<T, I>::value;
  // 型関係
  template<class T, class U>
    inline constexpr bool is_same_v = is_same<T, U>::value;
  template<class Base, class Derived>
    inline constexpr bool is_base_of_v = is_base_of<Base, Derived>::value;
  template<class Base, class Derived>
    inline constexpr bool is_virtual_base_of_v = is_virtual_base_of<Base, Derived>::value;
  template<class From, class To>
    inline constexpr bool is_convertible_v = is_convertible<From, To>::value;
  template<class From, class To>
    inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::value;
  template<class T, class U>
    inline constexpr bool is_layout_compatible_v = is_layout_compatible<T, U>::value;
  template<class Base, class Derived>
    inline constexpr bool is_pointer_interconvertible_base_of_v
      = is_pointer_interconvertible_base_of<Base, Derived>::value;
  template<class Fn, class... ArgTypes>
    inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::value;
  template<class R, class Fn, class... ArgTypes>
    inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value;
  template<class Fn, class... ArgTypes>
    inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::value;
  template<class R, class Fn, class... ArgTypes>
    inline constexpr bool is_nothrow_invocable_r_v
      = is_nothrow_invocable_r<R, Fn, ArgTypes...>::value;
  // 論理演算子の特性
  template<class... B>
    inline constexpr bool conjunction_v = conjunction<B...>::value;
  template<class... B>
    inline constexpr bool disjunction_v = disjunction<B...>::value;
  template<class B>
    inline constexpr bool negation_v = negation<B>::value;
  // メンバー関係
  template<class S, class M>
    constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
  template<class S1, class S2, class M1, class M2>
    constexpr bool is_corresponding_member(M1 S1::*m1, M2 S2::*m2) noexcept;
  // 定数評価コンテキスト
  constexpr bool is_constant_evaluated() noexcept;
  consteval bool is_within_lifetime(const auto*) noexcept;
}

クラステンプレート std::integral_constant

namespace std {
  template <class T, T v>
  struct integral_constant {
    static constexpr T value = v;
    using value_type = T;
    using type = integral_constant<T, v>;
    constexpr operator value_type() const noexcept { return value; }
    constexpr value_type operator()() const noexcept { return value; }
  };
}