Namespaces
Variants

Experimental library header <experimental/reflect>

From cppreference.net
Standard library headers
Experimental library headers
Execution P2300
<experimental/execution>
Filesystem TS
<experimental/filesystem>
Parallelism TS (v1, v2)
experimental/algorithm
experimental/execution_policy
experimental/exception_list
experimental/numeric
<experimental/simd>
experimental/task_block
Library Fundamentals TS (v1, v2, v3)
experimental/algorithm
<experimental/any>
experimental/array
experimental/chrono
experimental/deque
experimental/forward_list
<experimental/functional>
experimental/future
experimental/iterator
experimental/list
experimental/map
experimental/memory
<experimental/memory_resource>
experimental/numeric
<experimental/optional>
experimental/propagate_const
experimental/random
experimental/ratio
experimental/regex
experimental/scope
experimental/set
experimental/source_location
experimental/string
<experimental/string_view>
experimental/system_error
experimental/tuple
experimental/type_traits
experimental/unordered_map
experimental/unordered_set
experimental/utility
experimental/vector

Concurrency TS
experimental/atomic
experimental/barrier
experimental/future
experimental/latch
Ranges TS
Coroutines TS
experimental/coroutine
Networking TS
experimental/buffer
experimental/executor
experimental/internet
experimental/io_context
<experimental/net>
experimental/netfwd
experimental/socket
experimental/timer
Reflection TS
<experimental/reflect>

このヘッダーは Reflection TS の一部です。

名前空間 std::experimental::reflect で定義
インライン名前空間で定義 std::experimental::reflect::v1

目次

コンセプト

(reflection TS)
型がメタオブジェクト型であることを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型がメタオブジェクトシーケンス型であることを指定する
(concept)
(reflection TS)
メタオブジェクト型がテンプレートパラメータスコープを反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型が関連付けられた(空の場合もある)名前を持つエンティティまたはエイリアスを反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が型エイリアス、名前空間エイリアス、またはusing宣言によって導入されたエイリアスを反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型がクラスの member-declaration を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が列挙子を反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型が変数またはデータメンバを反映することを指定します
(コンセプト)
(reflection TS)
メタオブジェクト型が RecordMember Enumerator 、または Variable を満たすか、グローバル名前空間以外の名前空間を反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型が型を持つエンティティを反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が名前空間を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型がグローバル名前空間を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が非共用体クラス型を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が列挙型を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型がクラス型を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が名前空間、クラス、列挙型、関数、クロージャ型、テンプレートパラメータスコープを反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型が型を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が列挙子またはconstexpr変数を反映することを指定します
(concept)
(reflection TS)
メタオブジェクト型が get_base_classes から取得された直接基底クラスを反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型が関数パラメータを反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が関数(コンストラクタおよびデストラクタを含む)を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が式を反映することを指定する
(コンセプト)
メタオブジェクト型が括弧で囲まれた式を反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型が function-call-expression を反映することを指定する
(コンセプト)
メタオブジェクト型が functional-type-conv-expression を反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型が関数(コンストラクタとデストラクタを除く)を反映することを指定します
(concept)
(reflection TS)
メタオブジェクト型がメンバー関数(コンストラクタとデストラクタを除く)を反映することを指定します
(コンセプト)
(reflection TS)
メタオブジェクト型が特殊メンバ関数を反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型がコンストラクタを反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型がデストラクタを反映することを指定する
(コンセプト)
(reflection TS)
メタオブジェクト型が演算子関数または変換関数を反映することを指定する
(concept)
(reflection TS)
メタオブジェクト型が変換関数を反映することを指定します
(concept)
(reflection TS)
非ジェネリックラムダのクロージャ型を反映するメタオブジェクト型を指定する
(concept)
(reflection TS)
メタオブジェクト型がラムダキャプチャを反映することを指定する
(concept)

クラス

Object 操作
(reflection TS)
2つのメタオブジェクト型が同じエンティティまたはエイリアスを反映しているかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクトされたエンティティまたはエイリアスの宣言の推定行番号を取得する
(クラステンプレート)
(reflection TS)
リフレクトされたエンティティまたはエイリアスの宣言の実装定義の列番号を取得する
(クラステンプレート)
(reflection TS)
リフレクトされたエンティティまたはエイリアスの宣言の推定ファイル名を取得する
(クラステンプレート)
ObjectSequence 操作
(reflection TS)
メタオブジェクトシーケンスのサイズを取得する
(クラステンプレート)
(reflection TS)
シーケンス内の指定されたインデックスのメタオブジェクト型を取得する
(クラステンプレート)
(reflection TS)
メタオブジェクトシーケンスにテンプレートを適用する
(クラステンプレート)
Named 操作
(reflection TS)
リフレクトされたエンティティまたはエイリアスが名前付きかどうかをチェックする
(クラステンプレート)
(reflection TS)
反映されたエンティティまたはエイリアスの非修飾名を取得する
(クラステンプレート)
(reflection TS)
反映されたエンティティまたはエイリアスの実装定義の表示名を取得する
(クラステンプレート)
Alias 操作
(reflection TS)
リフレクトされたエイリアスの関連付けられたエンティティを反映するメタオブジェクト型を取得する
(クラステンプレート)
Type 操作
(reflection TS)
リフレクションされたエンティティまたはエイリアスの型を反映するメタオブジェクト型を取得する
(クラステンプレート)
(reflection TS)
リフレクトされたエンティティまたはエイリアスの型を取得する
(クラステンプレート)
(reflection TS)
メタオブジェクト型が列挙型を反映しているかどうかをチェックする
(クラステンプレート)
(reflection TS)
メタオブジェクト型が共用体型を反映しているかどうかをチェックする
(クラステンプレート)
メタオブジェクト型が、それぞれ class または struct を使用して宣言された非共用体クラス型を反映しているかどうかをチェックする
(クラステンプレート)
ScopeMember 操作
(reflection TS)
反映されたエンティティまたはエイリアスのスコープを反映するメタオブジェクト型を取得する
(クラステンプレート)
Base operations
(reflection TS)
指定された基底クラス関係における基底クラスを反映するメタオブジェクト型を取得する
(クラステンプレート)
RecordMember および Base 操作
(reflection TS)
リフレクションされたメンバまたは基底クラスがpublicかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクションされたメンバまたは基底クラスがprotectedかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクションされたメンバまたは基底クラスがprivateかどうかをチェックする
(クラステンプレート)
Record 操作
リフレクションされたクラスのpublic、アクセス可能、または全てのデータメンバーを反映するメタオブジェクトシーケンス型を取得する
(クラステンプレート)
リフレクションされたクラスのpublic、アクセス可能、または全てのメンバー関数を反映するメタオブジェクトシーケンス型を取得する
(クラステンプレート)
(reflection TS)
リフレクションされたクラスの全てのコンストラクタを反映するメタオブジェクトシーケンス型を取得する
(クラステンプレート)
(reflection TS)
反映されたクラスで宣言された全ての演算子関数と変換関数を反映するメタオブジェクトシーケンス型を取得する
(クラステンプレート)
(reflection TS)
リフレクションされたクラスのデストラクタを反映するメタオブジェクト型を取得する
(クラステンプレート)
公開、アクセス可能、またはすべてのネストされた型またはメンバーtypedefを反映するメタオブジェクトシーケンス型を取得する
(クラステンプレート)
メタオブジェクトシーケンス型を取得し、その要素は反映されたクラスのpublic、accessible、またはすべての基底クラスを反映する
(クラステンプレート)
Enum 操作
(reflection TS)
リフレクションされた列挙型がスコープ付きかどうかをチェックする
(クラステンプレート)
(reflection TS)
反映された列挙型の列挙子を反映するメタオブジェクトシーケンス型を取得する
(クラステンプレート)
(reflection TS)
リフレクトされた列挙型の基盤となる型を反映するメタオブジェクト型を取得する
(クラステンプレート)
Variable 操作
(reflection TS)
定数式であるリフレクトされた変数の値を取得する
(クラステンプレート)
(reflection TS)
変数が thread_local で宣言されているかどうかをチェックする
(クラステンプレート)
FunctionParameter 操作
(reflection TS)
リフレクトされたパラメータがデフォルト引数を持つかどうかをチェックする
(クラステンプレート)
Callable 操作
(reflection TS)
リフレクトされた関数のパラメータを反映するメタオブジェクトシーケンス型を取得する
(クラステンプレート)
(reflection TS)
リフレクションされた関数のパラメータリストが省略記号パラメータを含むかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクトされた関数が例外を投げないかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクションされた関数が削除されているかどうかをチェックする
(クラステンプレート)
Variable および Callable 操作
(reflection TS)
リフレクションされた変数または関数がconstexprかどうかをチェックする
(クラステンプレート)
Namespace および Callable 操作
(reflection TS)
リフレクトされた名前空間または関数がインラインかどうかをチェックする
(クラステンプレート)
ParenthesizedExpression 操作
(reflection TS)
括弧で囲まれた式のメタオブジェクト型を反映する非括弧化された式を取得する
(クラステンプレート)
FunctionCallExpression 操作
(reflection TS)
関数呼び出し式を反映したメタオブジェクト型を取得する function-call-expression
(クラステンプレート)
FunctionalTypeConversion 操作
(reflection TS)
リフレクションされた functional-type-conv-expression 内のコンストラクタを反映するメタオブジェクト型を取得する
(クラステンプレート)
Variable および Function 操作
(reflection TS)
リフレクトされた変数または関数のアドレス、またはリフレクトされた非静的メンバへのメンバポインタ値を取得する
(クラステンプレート)
MemberFunction 操作
リフレクションされたメンバー関数がそれぞれ const volatile & 、または && 修飾子で宣言されているかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクトされたメンバー関数が基底クラスのメンバー関数をオーバーライドするかどうかをチェックする
(クラステンプレート)
Record および MemberFunction 操作
(reflection TS)
リフレクトされたクラスまたはメンバー関数が final でマークされているかどうかをチェックする
(クラステンプレート)
Variable および MemberFunction 操作
(reflection TS)
リフレクトされた変数が静的ストレージ期間を持つか、リフレクトされたメンバー関数が静的であるかをチェックする
(クラステンプレート)
SpecialMemberFunction 操作
(reflection TS)
リフレクトされた特殊メンバ関数が暗黙的に宣言されているかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクトされた特殊メンバ関数がその最初の宣言でデフォルト化されているかどうかをチェックする
(クラステンプレート)
Constructor および ConversionOperator 操作
(reflection TS)
リフレクトされたコンストラクタまたは変換関数が explicit で宣言されているかどうかをチェックする
(クラステンプレート)
MemberFunction および Destructor 操作
(reflection TS)
リフレクションされたメンバー関数が仮想関数かどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクトされたメンバー関数が純粋仮想関数かどうかをチェックする
(クラステンプレート)
Lambda 操作
(reflection TS)
リフレクトされたクロージャ型のキャプチャを反映するメタオブジェクトシーケンス型を取得する
(クラステンプレート)
リフレクトされたクロージャ型のラムダ式のキャプチャデフォルトがそれぞれ = または & であるかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクションされたクロージャ型の operator() const で宣言されているかどうかをチェックする
(クラステンプレート)
LambdaCapture 操作
(reflection TS)
リフレクションされたラムダキャプチャが明示的にキャプチャされているかどうかをチェックする
(クラステンプレート)
(reflection TS)
リフレクションされたラムダキャプチャが初期化キャプチャであるかどうかをチェックする
(クラステンプレート)

概要

namespace std::experimental::reflect {
inline namespace v1 {
// 21.12.3 メタオブジェクト型のためのコンセプト
template <class T>
concept Object = /* 詳細は説明を参照 */;
template <class T>
concept ObjectSequence = /* 説明を参照 */; // Objectを改良
template <class T>
concept TemplateParameterScope = /* 説明を参照 */; // Scope を洗練する
template <class T>
concept Named = /* 詳細は説明を参照 */;          // Object を改良
template <class T>
concept Alias = /* 詳細は説明を参照 */;          // Named と ScopeMember を精緻化する
template <class T>
concept RecordMember = /* 説明を参照 */;   // ScopeMemberを精緻化
template <class T>
concept Enumerator = /* 詳細は説明を参照 */;     // Constantを洗練する
template <class T>
concept Variable = /* 詳細は説明を参照 */;       // Typed と ScopeMember を精緻化
template <class T>
concept ScopeMember = /* 詳細は説明を参照 */;    // Named を洗練する
template <class T>
concept Typed = /* 説明を参照 */;          // Objectを改良
template <class T>
concept Namespace = /* 詳細は説明を参照 */;      // Named と Scope を精緻化
template <class T>
concept GlobalScope = /* 詳細は説明を参照 */;    // 名前空間を洗練する
template <class T>
concept Class = /* 説明を参照 */;          // Record を改良
template <class T>
concept Enum = /* 説明を参照 */;           // Type、Scope、および ScopeMember を精緻化
template <class T>
concept Record = /* 説明を参照 */;         // Type、Scope、および ScopeMember を精緻化
template <class T>
concept Scope = /* 説明を参照 */;          // Objectを精緻化
template <class T>
concept Type = /* 詳細は説明を参照 */;           // Named を洗練
template <class T>
concept Constant = /* 説明を参照 */;       // Typed と ScopeMember を改良
template <class T>
concept Base = /* 説明を参照 */;           // Objectを精緻化
template <class T>
concept FunctionParameter = /* 詳細は説明を参照 */; // Typed と ScopeMember を精緻化
template <class T>
concept Callable = /* 詳細は説明を参照 */;       // Scope と ScopeMember を精緻化
template <class T>
concept Expression = /* 説明を参照 */;     // Object を改良
template <class T>
concept ParenthesizedExpression = /* 説明を参照 */; // Expressionを精緻化
template <class T>
concept FunctionCallExpression = /* 説明を参照 */; // Expression を精緻化
template <class T>
concept FunctionalTypeConversion = /* 詳細は説明を参照 */; // Expression を洗練する
template <class T>
concept Function = /* 説明を参照 */;       // Typed と Callable を洗練する
template <class T>
concept MemberFunction = /* 詳細は説明を参照 */; // RecordMember と Function を改良
template <class T>
concept SpecialMemberFunction = /* 説明を参照 */; // RecordMemberを洗練する
template <class T>
concept Constructor = /* 詳細は説明を参照 */;    // Callable と RecordMember を洗練させる
template <class T>
concept Destructor = /* 説明を参照 */;     // Callable と SpecialMemberFunction を洗練する
template <class T>
concept Operator = /* 説明を参照 */;       // Function を洗練する
template <class T>
concept ConversionOperator = /* 詳細は説明を参照 */; // MemberFunction と Operator を改良
template <class T>
concept Lambda = /* 説明を参照 */;         // Type と Scope を洗練する
template <class T>
concept LambdaCapture = /* 説明を参照 */;  // Variable を洗練する
// 21.12.4 メタオブジェクト操作
// マルチコンセプト操作
template <Object T> struct is_public;
template <Object T> struct is_protected;
template <Object T> struct is_private;
template <Object T> struct is_constexpr;
template <Object T> struct is_static;
template <Object T> struct is_final;
template <Object T> struct is_explicit;
template <Object T> struct is_inline;
template <Object T> struct is_virtual;
template <Object T> struct is_pure_virtual;
template <Object T> struct get_pointer;
template <class T>
requires RecordMember<T> || Base<T>
  constexpr auto is_public_v = is_public<T>::value;
template <class T>
requires RecordMember<T> || Base<T>
  constexpr auto is_protected_v = is_protected<T>::value;
template <class T>
requires RecordMember<T> || Base<T>
  constexpr auto is_private_v = is_private<T>::value;
template <class T>
requires Variable<T> || Callable<T>
  constexpr auto is_constexpr_v = is_constexpr<T>::value;
template <class T>
requires Variable<T> || MemberFunction<T>
  constexpr auto is_static_v = is_static<T>::value;
template <class T>
requires Class<T> || MemberFunction<T>
  constexpr auto is_final_v = is_final<T>::value;
template <class T>
requires Constructor<T> || ConversionOperator<T>
  constexpr auto is_explicit_v = is_explicit<T>::value;
template <class T>
requires Namespace<T> || Callable<T>
  constexpr auto is_inline_v = is_inline<T>::value;
template <class T>
requires Base<T> || MemberFunction<T> || Destructor<T>
  constexpr auto is_virtual_v = is_virtual<T>::value;
template <class T>
requires MemberFunction<T> || Destructor<T>
  constexpr auto is_pure_virtual_v = is_pure_virtual<T>::value;
template <class T>
requires Variable<T> || Function<T>
  constexpr auto get_pointer_v = get_pointer<T>::value;
// 21.12.4.1 オブジェクト操作
template <Object T1, Object T2> struct reflects_same;
template <Object T> struct get_source_line;
template <Object T> struct get_source_column;
template <Object T> struct get_source_file_name;
template <Object T1, Object T2>
  constexpr auto reflects_same_v = reflects_same<T1, T2>::value;
template <class T>
  constexpr auto get_source_line_v = get_source_line<T>::value;
template <class T>
  constexpr auto get_source_column_v = get_source_column<T>::value;
template <class T>
  constexpr auto get_source_file_name_v = get_source_file_name<T>::value;
// 21.12.4.2 ObjectSequence 操作
template <ObjectSequence T> struct get_size;
template <size_t I, ObjectSequence T> struct get_element;
template <template <class...> class Tpl, ObjectSequence T>
  struct unpack_sequence;
template <ObjectSequence T>
  constexpr auto get_size_v = get_size<T>::value;
template <size_t I, ObjectSequence T>
  using get_element_t = typename get_element<I, T>::type;
template <template <class...> class Tpl, ObjectSequence T>
  using unpack_sequence_t = typename unpack_sequence<Tpl, T>::type;
// 21.12.4.3 名前付き操作
template <Named T> struct is_unnamed;
template <Named T> struct get_name;
template <Named T> struct get_display_name;
template <Named T>
  constexpr auto is_unnamed_v = is_unnamed<T>::value;
template <Named T>
  constexpr auto get_name_v = get_name<T>::value;
template <Named T>
  constexpr auto get_display_name_v = get_display_name<T>::value;
// 21.12.4.4 エイリアス操作
template <Alias T> struct get_aliased;
template <Alias T>
  using get_aliased_t = typename get_aliased<T>::type;
// 21.12.4.5 型操作
template <Typed T> struct get_type;
template <Type T> struct get_reflected_type;
template <Type T> struct is_enum;
template <Class T> struct uses_class_key;
template <Class T> struct uses_struct_key;
template <Type T> struct is_union;
template <Typed T>
  using get_type_t = typename get_type<T>::type;
template <Type T>
  using get_reflected_type_t = typename get_reflected_type<T>::type;
template <Type T>
  constexpr auto is_enum_v = is_enum<T>::value;
template <Class T>
  constexpr auto uses_class_key_v = uses_class_key<T>::value;
template <Class T>
  constexpr auto uses_struct_key_v = uses_struct_key<T>::value;
template <Type T>
  constexpr auto is_union_v = is_union<T>::value;
// 21.12.4.6 メンバー操作
template <ScopeMember T> struct get_scope;
template <RecordMember T> struct is_public<T>;
template <RecordMember T> struct is_protected<T>;
template <RecordMember T> struct is_private<T>;
template <ScopeMember T>
  using get_scope_t = typename get_scope<T>::type;
// 21.12.4.7 レコード操作
template <Record T> struct get_public_data_members;
template <Record T> struct get_accessible_data_members;
template <Record T> struct get_data_members;
template <Record T> struct get_public_member_functions;
template <Record T> struct get_accessible_member_functions;
template <Record T> struct get_member_functions;
template <Record T> struct get_public_member_types;
template <Record T> struct get_accessible_member_types;
template <Record T> struct get_member_types;
template <Record T> struct get_constructors;
template <Record T> struct get_destructor;
template <Record T> struct get_operators;
template <Class T> struct get_public_base_classes;
template <Class T> struct get_accessible_base_classes;
template <Class T> struct get_base_classes;
template <Class T> struct is_final<T>;
template <Record T>
  using get_public_data_members_t = typename get_public_data_members<T>::type;
template <Record T>
  using get_accessible_data_members_t = typename get_accessible_data_members<T>::type;
template <Record T>
  using get_data_members_t = typename get_data_members<T>::type;
template <Record T>
  using get_public_member_functions_t = typename get_public_member_functions<T>::type;
template <Record T>
  using get_accessible_member_functions_t = typename get_accessible_member_functions<T>::type;
template <Record T>
  using get_member_functions_t = typename get_member_functions<T>::type;
template <Record T>
  using get_public_member_types_t = typename get_public_member_types<T>::type;
template <Record T>
  using get_accessible_member_types_t = typename get_accessible_member_types<T>::type;
template <Record T>
  using get_member_types_t = typename get_member_types<T>::type;
template <Record T>
  using get_constructors_t = typename get_constructors<T>::type;
template <Record T>
  using get_destructor_t = typename get_destructor<T>::type;
template <Record T>
  using get_operators_t = typename get_operators<T>::type;
template <Class T>
  using get_public_base_classes_t = typename get_public_base_classes<T>::type;
template <Class T>
  using get_accessible_base_classes_t = typename get_accessible_base_classes<T>::type;
template <Class T>
  using get_base_classes_t = typename get_base_classes<T>::type;
// 21.12.4.8 列挙型操作
template <Enum T> struct is_scoped_enum;
template <Enum T> struct get_enumerators;
template <Enum T> struct get_underlying_type;
template <Enum T>
  constexpr auto is_scoped_enum_v = is_scoped_enum<T>::value;
template <Enum T>
  using get_enumerators_t = typename get_enumerators<T>::type;
template <Enum T>
  using get_underlying_type_t = typename get_underlying_type<T>::type;
// 21.12.4.9 値操作
template <Constant T> struct get_constant;
template <Variable T> struct is_constexpr<T>;
template <Variable T> struct is_static<T>;
template <Variable T> struct is_thread_local;
template <Variable T> struct get_pointer<T>;
template <Constant T>
  constexpr auto get_constant_v = get_constant<T>::value;
template <Variable T>
  constexpr auto is_thread_local_v = is_thread_local<T>::value;
// 21.12.4.10 基本操作
template <Base T> struct get_class;
template <Base T> struct is_virtual<T>;
template <Base T> struct is_public<T>;
template <Base T> struct is_protected<T>;
template <Base T> struct is_private<T>;
template <Base T>
  using get_class_t = typename get_class<T>::type;
// 21.12.4.11 名前空間操作
template <Namespace T> struct is_inline<T>;
// 21.12.4.12 FunctionParameter 操作
template <FunctionParameter T> struct has_default_argument;
template <FunctionParameter T>
  constexpr auto has_default_argument_v = has_default_argument<T>::value;
// 21.12.4.13 Callable operations
template <Callable T> struct get_parameters;
template <Callable T> struct is_vararg;
template <Callable T> struct is_constexpr<T>;
template <Callable T> struct is_noexcept;
template <Callable T> struct is_inline<T>;
template <Callable T> struct is_deleted;
template <Callable T>
  using get_parameters_t = typename get_parameters<T>::type;
template <Callable T>
  constexpr auto is_vararg_v = is_vararg<T>::value;
template <Callable T>
  constexpr auto is_deleted_v = is_deleted<T>::value;
// 21.12.4.14 括弧で囲まれた式の操作
template <ParenthesizedExpression T> struct get_subexpression;
template <ParenthesizedExpression T>
  using get_subexpression_t = typename get_subexpression<T>::type;
// 21.12.4.15 FunctionCallExpression 操作
template <FunctionCallExpression T> struct get_callable;
template <FunctionCallExpression T>
  using get_callable_t = typename get_callable<T>::type;
// 21.12.4.16 FunctionalTypeConversion 操作
template <FunctionalTypeConversion T> struct get_constructor;
template <FunctionalTypeConversion T>
  using get_constructor_t = typename get_constructor<T>::type;
// 21.12.4.17 関数操作
template <Function T> struct get_pointer<T>;
// 21.12.4.18 メンバー関数操作
template <MemberFunction T> struct is_static<T>;
template <MemberFunction T> struct is_const;
template <MemberFunction T> struct is_volatile;
template <MemberFunction T> struct has_lvalueref_qualifier;
template <MemberFunction T> struct has_rvalueref_qualifier;
template <MemberFunction T> struct is_virtual<T>;
template <MemberFunction T> struct is_pure_virtual<T>;
template <MemberFunction T> struct is_override;
template <MemberFunction T> struct is_final<T>;
template <MemberFunction T>
  constexpr auto is_const_v = is_const<T>::value;
template <MemberFunction T>
  constexpr auto is_volatile_v = is_volatile<T>::value;
template <MemberFunction T>
  constexpr auto has_lvalueref_qualifier_v = has_lvalueref_qualifier<T>::value;
template <MemberFunction T>
  constexpr auto has_rvalueref_qualifier_v = has_rvalueref_qualifier<T>::value;
template <MemberFunction T>
  constexpr auto is_override_v = is_override<T>::value;
// 21.12.4.19 特殊メンバ関数の操作
template <SpecialMemberFunction T> struct is_implicitly_declared;
template <SpecialMemberFunction T> struct is_defaulted;
template <SpecialMemberFunction T>
  constexpr auto is_implicitly_declared_v = is_implicitly_declared<T>::value;
template <SpecialMemberFunction T>
  constexpr auto is_defaulted_v = is_defaulted<T>::value;
// 21.12.4.20 コンストラクタ操作
template <Constructor T> struct is_explicit<T>;
// 21.12.4.21 デストラクタ操作
template <Destructor T> struct is_virtual<T>;
template <Destructor T> struct is_pure_virtual<T>;
// 21.12.4.22 ConversionOperator 操作
template <ConversionOperator T> struct is_explicit<T>;
// 21.12.4.23 ラムダ演算
template <Lambda T> struct get_captures;
template <Lambda T> struct uses_default_copy_capture;
template <Lambda T> struct uses_default_reference_capture;
template <Lambda T> struct is_call_operator_const;
template <Lambda T>
  using get_captures_t = typename get_captures<T>::type;
template <Lambda T>
  constexpr auto uses_default_copy_capture_v = uses_default_copy_capture<T>::value;
template <Lambda T>
  constexpr auto uses_default_reference_capture_v = uses_default_reference_capture<T>::value;
template <Lambda T>
  constexpr auto is_call_operator_const_v = is_call_operator_const<T>::value;
// 21.12.4.24 LambdaCapture 操作
template <LambdaCapture T> struct is_explicitly_captured;
template <LambdaCapture T> struct is_init_capture;
template <LambdaCapture T>
  constexpr auto is_explicitly_captured_v = is_explicitly_captured<T>::value;
template <LambdaCapture T>
  constexpr auto is_init_capture_v = is_init_capture<T>::value;
} // inline namespace v1
} // namespace std::experimental::reflect