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)
메타-객체 타입인 타입을 지정함
(concept)
(reflection TS)
메타 객체 타입이 메타 객체 시퀀스 타입임을 지정함
(concept)
(reflection TS)
메타 객체 타입이 템플릿 매개변수 스코프를 반영함을 지정
(concept)
(reflection TS)
메타 객체 타입이 연관된 (빈 값일 수도 있는) 이름을 가진 엔티티나 별칭을 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 타입 별칭, 네임스페이스 별칭 또는 using 선언으로 도입된 별칭을 반영함을 지정함
(concept)
(reflection TS)
메타 객체 타입이 클래스의 member-declaration 을 반영한다는 것을 명시함
(concept)
(reflection TS)
메타 객체 타입이 열거자를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 변수나 데이터 멤버를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 RecordMember , Enumerator , 또는 Variable 를 만족하거나, 전역 네임스페이스 이외의 네임스페이스를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 타입을 가진 엔티티를 반영함을 명시
(concept)
(reflection TS)
메타 객체 타입이 네임스페이스를 반영함을 지정
(concept)
(reflection TS)
메타 객체 타입이 전역 네임스페이스를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 비-유니온 클래스 타입을 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 열거형 타입을 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 클래스 타입을 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 네임스페이스, 클래스, 열거형, 함수, 클로저 타입, 템플릿 매개변수 스코프를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 타입을 반영함을 지정함
(concept)
(reflection TS)
메타 객체 타입이 열거자 또는 constexpr 변수를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 get_base_classes 로부터 얻은 직접 기본 클래스를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 함수 매개변수를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 함수(생성자와 소멸자 포함)를 반영함을 명시
(concept)
(reflection TS)
메타 객체 타입이 표현식을 반영함을 지정합니다
(concept)
메타 객체 타입이 괄호로 묶인 표현식을 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 function-call-expression 를 반영함을 지정합니다
(concept)
메타 객체 타입이 functional-type-conv-expression 을 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 함수(생성자와 소멸자 제외)를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 멤버 함수(생성자와 소멸자 제외)를 반영함을 명시합니다
(concept)
(reflection TS)
메타 객체 타입이 특별 멤버 함수를 반영한다는 것을 명시함
(concept)
(reflection TS)
메타 객체 타입이 생성자를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 소멸자를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 연산자 함수 또는 변환 함수를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 변환 함수를 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 비제네릭 람다의 클로저 타입을 반영함을 지정합니다
(concept)
(reflection TS)
메타 객체 타입이 람다 캡처를 반영함을 지정합니다
(concept)

클래스

Object operations
(reflection TS)
두 메타-객체 타입이 동일한 엔티티나 별칭을 반영하는지 확인합니다
(클래스 템플릿)
(reflection TS)
반사된 엔티티 또는 별칭의 선언부 추정 라인 번호를 획득함
(클래스 템플릿)
(reflection TS)
반사된 엔티티 또는 별칭의 선언에 대한 구현 정의 열 번호를 획득함
(클래스 템플릿)
(reflection TS)
반사된 엔티티 또는 별칭의 선언이 위치한 추정 파일 이름을 획득
(클래스 템플릿)
ObjectSequence 연산
(reflection TS)
메타 객체 시퀀스의 크기를 얻음
(클래스 템플릿)
(reflection TS)
시퀀스 내 지정된 인덱스를 가진 메타 객체 타입을 획득함
(클래스 템플릿)
(reflection TS)
메타 객체 시퀀스에 템플릿을 적용함
(클래스 템플릿)
Named 연산
(reflection TS)
반사된 개체 또는 별칭이 이름을 가지고 있는지 확인합니다
(클래스 템플릿)
(reflection TS)
반사된 엔티티 또는 별칭의 비한정 이름을 획득함
(클래스 템플릿)
(reflection TS)
반사된 엔티티나 별칭의 구현 정의 디스플레이 이름을 획득함
(클래스 템플릿)
Alias operations
(reflection TS)
반사된 별칭의 연관된 엔티티를 반영하는 메타 객체 타입을 획득함
(클래스 템플릿)
Type 타입 연산
(reflection TS)
반사된 엔티티나 별칭의 타입을 반영하는 메타 객체 타입을 획득함
(클래스 템플릿)
(reflection TS)
반사된 엔티티 또는 별칭의 타입을 획득함
(클래스 템플릿)
(reflection TS)
메타 객체 타입이 열거형 타입을 반영하는지 검사합니다
(클래스 템플릿)
(reflection TS)
메타 객체 타입이 union 타입을 반영하는지 검사합니다
(클래스 템플릿)
메타 객체 타입이 각각 class 또는 struct 키워드를 사용하여 선언된 비-유니온 클래스 타입을 반영하는지 검사합니다
(클래스 템플릿)
ScopeMember operations
(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)
리플렉션된 클래스의 소멸자를 반영하는 메타 객체 타입을 획득함
(클래스 템플릿)
반영된 클래스의 public, 접근 가능, 또는 모든 중첩 타입 또는 멤버 typedef를 반영하는 메타 객체 시퀀스 타입을 획득함
(클래스 템플릿)
반영된 클래스의 public, 접근 가능, 또는 모든 기본 클래스들을 반영하는 메타 객체 시퀀스 타입을 획득함
(클래스 템플릿)
Enum 연산
(reflection TS)
리플렉션된 열거형이 범위 지정 열거형인지 검사합니다
(클래스 템플릿)
(reflection TS)
반사된 열거형의 열거자를 반영하는 메타 객체 시퀀스 타입을 획득함
(클래스 템플릿)
(reflection TS)
반사된 열거형의 기반 타입을 반영하는 메타 객체 타입을 획득함
(클래스 템플릿)
Variable 변수 연산
(reflection TS)
상수 표현식인 반영된 변수의 값을 획득함
(클래스 템플릿)
(reflection TS)
변수가 thread_local 로 선언되었는지 확인합니다
(클래스 템플릿)
FunctionParameter 연산
(reflection TS)
리플렉션된 매개변수가 기본 인수를 가지는지 여부를 검사합니다
(클래스 템플릿)
Callable operations
(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 and Function operations
(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 operations
(reflection TS)
반사된 클로저 타입의 캡처들을 반영하는 메타-객체 시퀀스 타입을 획득함
(클래스 템플릿)
리플렉션된 클로저 타입의 람다 표현식의 캡처 기본값이 각각 = 또는 & 인지 확인합니다
(클래스 템플릿)
(reflection TS)
리플렉션된 클로저 타입의 operator() const 로 선언되었는지 확인합니다
(클래스 템플릿)
LambdaCapture 연산
(reflection TS)
리플렉션된 람다 캡처가 명시적으로 캡처되었는지 확인합니다
(클래스 템플릿)
(reflection TS)
반사된 람다 캡처가 초기화 캡처인지 확인합니다
(클래스 템플릿)

시놉시스

namespace std::실험적::reflect {
inline namespace v1 {
// 21.12.3 메타 객체 타입을 위한 Concepts
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 호출 가능 연산
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 연산
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