実験的ライブラリヘッダ <experimental/reflect>
From cppreference.com
< cpp | header | experimental
このヘッダはReflection TSの一部です。
| 名前空間
std::experimental::reflectで定義されています。 | |
| インライン名前空間
std::experimental::reflect::v1で定義されています。 | |
コンセプト | |
| (reflection TS) |
型がメタオブジェクト型であることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型がメタオブジェクトシーケンス型であることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型がテンプレートパラメータスコープを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、名前(空の場合もある)に関連付けられたエンティティまたはエイリアスを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、型エイリアス、名前空間エイリアス、またはusing宣言によって導入されたエイリアスを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、クラスのメンバ宣言を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、列挙子を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、変数またはデータメンバを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、RecordMember、Enumerator、またはVariableを満たすか、グローバル名前空間以外の名前空間を反映していることを指定します。(コンセプト) |
| (reflection TS) |
メタオブジェクト型が、型を持つエンティティを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、名前空間を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、グローバル名前空間を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、非unionクラス型を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、列挙型を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、クラス型を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、名前空間、クラス、列挙、関数、クロージャ型、テンプレートパラメータスコープを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、型を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、列挙子またはconstexpr変数を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、get_base_classesから取得した直接基底クラスを反映していることを指定します。(コンセプト) |
| (reflection TS) |
メタオブジェクト型が、関数パラメータを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、関数(コンストラクタおよびデストラクタを含む)を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、式を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、括弧付き式を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、関数呼び出し式を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、関数型変換式を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、関数(コンストラクタおよびデストラクタを除く)を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、メンバ関数(コンストラクタおよびデストラクタを除く)を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、特殊メンバ関数を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、コンストラクタを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、デストラクタを反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、演算子関数または変換関数を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、変換関数を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、非ジェネリックラムダのクロージャ型を反映していることを指定します。 (コンセプト) |
| (reflection TS) |
メタオブジェクト型が、ラムダキャプチャを反映していることを指定します。 (コンセプト) |
クラス | |
| |
| (reflection TS) |
2つのメタオブジェクト型が同じエンティティまたはエイリアスを反映しているかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映されたエンティティまたはエイリアスの宣言のおおよその行番号を取得します。 (クラステンプレート) |
| (reflection TS) |
反映されたエンティティまたはエイリアスの宣言の実装定義の列番号を取得します。 (クラステンプレート) |
| (reflection TS) |
反映されたエンティティまたはエイリアスの宣言のおおよそのファイル名を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
メタオブジェクトシーケンスのサイズを取得します。 (クラステンプレート) |
| (reflection TS) |
シーケンス内の指定されたインデックスのメタオブジェクト型を取得します。 (クラステンプレート) |
| (reflection TS) |
メタオブジェクトシーケンスにテンプレートを適用します。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたエンティティまたはエイリアスに名前があるかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映されたエンティティまたはエイリアスの修飾されていない名前を取得します。 (クラステンプレート) |
| (reflection TS) |
反映されたエンティティまたはエイリアスの実装定義の表示名を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたエイリアスに関連付けられたエンティティを反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたエンティティまたはエイリアスの型を反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| (reflection TS) |
反映されたエンティティまたはエイリアスの型を取得します。 (クラステンプレート) |
| (reflection TS) |
メタオブジェクト型が列挙型を反映しているかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
メタオブジェクト型がunion型を反映しているかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
メタオブジェクト型が、それぞれclassまたはstructを使用して宣言された非unionクラス型を反映しているかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたエンティティまたはエイリアスのスコープを反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
指定された基底クラス関係における基底クラスを反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたメンバまたは基底クラスがpublicであるかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映されたメンバまたは基底クラスがprotectedであるかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映されたメンバまたは基底クラスがprivateであるかどうかをチェックします。 (クラステンプレート) |
| |
| 反映されたクラスのpublic、accessible、またはすべてのデータメンバを反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) | |
| 反映されたクラスのpublic、accessible、またはすべてのメンバ関数を反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) | |
| (reflection TS) |
反映されたクラスのすべてのコンストラクタを反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) |
| (reflection TS) |
反映されたクラスで宣言されたすべての演算子関数と変換関数を反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) |
| (reflection TS) |
反映されたクラスのデストラクタを反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| 反映されたクラスのpublic、accessible、またはすべてのネストされた型またはメンバtypedefを反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) | |
| 反映されたクラスのpublic、accessible、またはすべての基底クラスを反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) | |
| |
| (reflection TS) |
反映された列挙がスコープ付きかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映された列挙の列挙子を反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) |
| (reflection TS) |
反映された列挙の基底型を反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
定数式である反映された変数の値を取得します。 (クラステンプレート) |
| (reflection TS) |
変数がthread_localで宣言されているかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたパラメータにデフォルト引数があるかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映された関数のパラメータを反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) |
| (reflection TS) |
反映された関数のパラメータリストに省略記号パラメータが含まれているかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映された関数が非スロー関数かどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映された関数が削除されているかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映された変数または関数がconstexprかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映された名前空間または関数がインラインかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映された括弧付き式の括弧で囲まれていない式を反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
反映された関数呼び出し式の関数を反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
反映された関数型変換式のコンストラクタを反映するメタオブジェクト型を取得します。 (クラステンプレート) |
| |
| (reflection TS) |
反映された変数または関数のアドレス、または反映された非静的メンバへのポインタ・トゥ・メンバ値を取得します。 (クラステンプレート) |
| |
| 反映されたメンバ関数がそれぞれconst、volatile、&、または&&修飾子で宣言されているかどうかをチェックします。 (クラステンプレート) | |
| (reflection TS) |
反映されたメンバ関数が基底クラスのメンバ関数をオーバーライドしているかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたクラスまたはメンバ関数がfinalでマークされているかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映された変数が静的記憶域期間であるか、または反映されたメンバ関数が静的かどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映された特殊メンバ関数が暗黙宣言されているかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映された特殊メンバ関数が最初の宣言でデフォルト化されているかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたコンストラクタまたは変換関数がexplicitで宣言されているかどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたメンバ関数が仮想関数かどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映されたメンバ関数が純粋仮想関数かどうかをチェックします。 (クラステンプレート) |
| |
| (reflection TS) |
反映されたクロージャ型のキャプチャを反映する要素を持つメタオブジェクトシーケンス型を取得します。 (クラステンプレート) |
| (reflection TS) |
反映されたクロージャ型のラムダ式のキャプチャデフォルトがそれぞれ=または&であるかどうかをチェックします。(クラステンプレート) |
| (reflection TS) |
反映されたクロージャ型のoperator()がconstで宣言されているかどうかをチェックします。(クラステンプレート) |
| |
| (reflection TS) |
反映されたラムダキャプチャが明示的にキャプチャされているかどうかをチェックします。 (クラステンプレート) |
| (reflection TS) |
反映されたラムダキャプチャがinit-captureであるかどうかをチェックします。 (クラステンプレート) |
[編集] Synopsis
namespace std::experimental::reflect { inline namespace v1 { // 21.12.3 Concepts for meta-object types template <class T> concept Object = /* see description */; template <class T> concept ObjectSequence = /* see description */; // refines Object template <class T> concept TemplateParameterScope = /* see description */; // refines Scope template <class T> concept Named = /* see description */; // refines Object template <class T> concept Alias = /* see description */; // refines Named and ScopeMember template <class T> concept RecordMember = /* see description */; // refines ScopeMember template <class T> concept Enumerator = /* see description */; // refines Constant template <class T> concept Variable = /* see description */; // refines Typed and ScopeMember template <class T> concept ScopeMember = /* see description */; // refines Named template <class T> concept Typed = /* see description */; // refines Object template <class T> concept Namespace = /* see description */; // refines Named and Scope template <class T> concept GlobalScope = /* see description */; // refines Namespace template <class T> concept Class = /* see description */; // refines Record template <class T> concept Enum = /* see description */; // refines Type, Scope, and ScopeMember template <class T> concept Record = /* see description */; // refines Type, Scope, and ScopeMember template <class T> concept Scope = /* see description */; // refines Object template <class T> concept Type = /* see description */; // refines Named template <class T> concept Constant = /* see description */; // refines Typed and ScopeMember template <class T> concept Base = /* see description */; // refines Object template <class T> concept FunctionParameter = /* see description */; // refines Typed and ScopeMember template <class T> concept Callable = /* see description */; // refines Scope and ScopeMember template <class T> concept Expression = /* see description */; // refines Object template <class T> concept ParenthesizedExpression = /* see description */; // refines Expression template <class T> concept FunctionCallExpression = /* see description */; // refines Expression template <class T> concept FunctionalTypeConversion = /* see description */; // refines Expression template <class T> concept Function = /* see description */; // refines Typed and Callable template <class T> concept MemberFunction = /* see description */; // refines RecordMember and Function template <class T> concept SpecialMemberFunction = /* see description */; // refines RecordMember template <class T> concept Constructor = /* see description */; // refines Callable and RecordMember template <class T> concept Destructor = /* see description */; // refines Callable and SpecialMemberFunction template <class T> concept Operator = /* see description */; // refines Function template <class T> concept ConversionOperator = /* see description */; // refines MemberFunction and Operator template <class T> concept Lambda = /* see description */; // refines Type and Scope template <class T> concept LambdaCapture = /* see description */; // refines Variable // 21.12.4 Meta-object operations // Multi-concept operations 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 Object operations 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 operations 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 Named operations 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 Alias operations template <Alias T> struct get_aliased; template <Alias T> using get_aliased_t = typename get_aliased<T>::type; // 21.12.4.5 Type operations 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 Member operations 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 Record operations 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 Enum operations 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 Value operations 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 Base operations 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 Namespace operations template <Namespace T> struct is_inline<T>; // 21.12.4.12 FunctionParameter operations 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 ParenthesizedExpression operations template <ParenthesizedExpression T> struct get_subexpression; template <ParenthesizedExpression T> using get_subexpression_t = typename get_subexpression<T>::type; // 21.12.4.15 FunctionCallExpression operations template <FunctionCallExpression T> struct get_callable; template <FunctionCallExpression T> using get_callable_t = typename get_callable<T>::type; // 21.12.4.16 FunctionalTypeConversion operations template <FunctionalTypeConversion T> struct get_constructor; template <FunctionalTypeConversion T> using get_constructor_t = typename get_constructor<T>::type; // 21.12.4.17 Function operations template <Function T> struct get_pointer<T>; // 21.12.4.18 MemberFunction operations 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 SpecialMemberFunction operations 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 Constructor operations template <Constructor T> struct is_explicit<T>; // 21.12.4.21 Destructor operations template <Destructor T> struct is_virtual<T>; template <Destructor T> struct is_pure_virtual<T>; // 21.12.4.22 ConversionOperator operations template <ConversionOperator T> struct is_explicit<T>; // 21.12.4.23 Lambda operations 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 operations 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