<type_traits>

형식 인수의 속성에 대한 정보를 제공하거나 변환된 형식을 생성하는 컴파일 시간 상수에 대한 템플릿을 정의합니다.

구문

#include <type_traits>

설명

type_traits> 클래스 및 템플릿<은 컴파일 시간에 형식 유추, 분류 및 변환을 지원하는 데 사용됩니다. 또한 형식 관련 오류를 검색하고 제네릭 코드를 최적화하는 데에도 사용됩니다. 단항 형식 특성은 형식의 속성을 설명하고, 이진 형식 특성은 형식 간의 관계를 설명하고, 변환 특성은 형식의 속성을 수정합니다.

도우미 클래스 integral_constant 및 해당 템플릿 특수화 및 true_typefalse_type 형식 조건자에 대한 기본 클래스를 형성합니다. 형식 조건자는 형식 인수를 하나 이상 사용하는 템플릿입니다. 형식 조건자가 true인 경우 true_type 직접 또는 간접적으로 공개적으로 파생됩니다. 형식 조건자가 false인 경우 false_type 직접 또는 간접적으로 공개적으로 파생됩니다.

형식 한정자 또는 변환 특성은 템플릿 인수를 하나 이상 사용하며 수정된 형식과 동일한 의미인 단일 구성원(type)를 포함하는 템플릿입니다.

별칭 템플릿

형식 특성 식을 간소화하기 위해 typename some_trait<T>::type 별칭 템플릿이 제공됩니다. 여기서 some_trait 클래스 템플릿 이름입니다. 예를 들어 add_const에는 다음과 같이 정의된 add_const_t 형식에 대한 별칭 템플릿이 있습니다.

template <class T>
using add_const_t = typename add_const<T>::type;

멤버에 대해 type 제공된 별칭은 다음과 같습니다.

add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t\

common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t\

remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t\

클래스

도우미 클래스 및 형식 정의

이름 설명
integral_constant 형식 및 값에서 정수 계열 상수를 만듭니다.
true_type 값이 true인 정수 상수를 보관합니다.
false_type 값이 false인 정수 상수를 보관합니다.

기본 형식 범주

이름 설명
is_void 형식이 void인지 테스트합니다.
is_null_pointer 형식이 std::nullptr_t인지 테스트합니다.
is_integral 형식이 정수인지 테스트합니다.
is_floating_point 형식이 부동 소수점인지 테스트합니다.
is_array 형식이 배열형인지 테스트합니다.
is_pointer 형식이 포인터인지 테스트합니다.
is_lvalue_reference 형식이 lvalue 참조인지 여부를 테스트합니다.
is_rvalue_reference 형식이 rvalue 참조인지 테스트합니다.
is_member_object_pointer 형식이 멤버 개체에 대한 포인터인지 테스트합니다.
is_member_function_pointer 형식이 멤버 함수에 대한 포인터인지 테스트합니다.
is_enum 형식이 열거형인지 테스트합니다.
is_union 형식이 공용 구조체인지 테스트합니다.
is_class 형식이 클래스인지 테스트합니다.
is_function 형식이 함수 형식인지 테스트합니다.

복합 형식 범주

이름 설명
is_reference 형식이 참조인지 테스트합니다.
is_arithmetic 형식이 산술형인지 테스트합니다.
is_fundamental 형식이 void 또는 산술형인지 테스트합니다.
is_object 형식이 개체 형식인지 테스트합니다.
is_scalar 형식이 스칼라 형식인지 테스트합니다.
is_compound 형식이 스칼라가 아닌지 테스트합니다.
is_member_pointer 형식이 멤버에 대한 포인터인지 테스트합니다.

형식 속성

이름 설명
is_const 형식이 const인지 테스트합니다.
is_volatile 형식이 volatile인지 테스트합니다.
is_trivial 형식이 trivial인지 테스트합니다.
is_trivially_copyable 형식을 일반적으로 복사할 수 있는지 테스트합니다.
is_standard_layout 형식이 표준 레이아웃 형식인지 테스트합니다.
is_pod 형식이 POD인지 테스트합니다.
is_literal_type 형식이 constexpr 변수이거나 constexpr 함수에서 사용할 수 있는지 테스트합니다.
is_empty 형식이 빈 클래스인지 테스트합니다.
is_polymorphic 형식이 다형 클래스인지 테스트합니다.
is_abstract 형식이 추상 클래스인지 테스트합니다.
is_final 형식이 final로 표시된 클래스 종류인지 테스트합니다.
is_aggregate
is_signed 형식이 부호 있는 정수인지 테스트합니다.
is_unsigned 형식이 부호가 없는 정수인지 테스트합니다.
is_constructible 형식이 지정된 인수 유형을 사용하여 생성 가능한지 테스트합니다.
is_default_constructible 형식에 기본 생성자가 있는지 테스트합니다.
is_copy_constructible 형식에 복사 생성자가 있는지 테스트합니다.
is_move_constructible 형식에 이동 생성자가 있는지 테스트합니다.
is_assignable 첫 번째 형식에 두 번째 형식의 값을 할당할 수 있는지 테스트합니다.
is_copy_assignable 형식에 해당 형식의 const 참조 값을 할당할 수 있는지 테스트합니다.
is_move_assignable 형식에 해당 형식의 rvalue 참조를 할당할 수 있는지 테스트합니다.
is_swappable
is_swappable_with
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 형식이 생성 가능하며 지정된 형식을 사용하여 생성할 때 throw되지 않는 것으로 확인되는지 테스트합니다.
is_nothrow_default_constructible 형식이 기본 생성 가능하며 기본 생성 시에 throw되지 않는 것으로 확인되는지 테스트합니다.
is_nothrow_copy_constructible 형식이 복사 생성 가능하며 복사 생성자가 throw되지 않는 것으로 확인되는지 테스트합니다.
is_nothrow_move_constructible 형식이 이동 생성 가능하며 이동 생성자가 throw되지 않는 것으로 확인되는지 테스트합니다.
is_nothrow_assignable 형식이 지정된 형식을 사용하여 할당 가능하며 할당이 throw되지 않는 것으로 확인되는지 테스트합니다.
is_nothrow_copy_assignable 형식이 복사 할당 가능하며 할당이 throw되지 않는 것으로 확인되는지 테스트합니다.
is_nothrow_move_assignable 형식이 이동 할당 가능하며 할당이 throw되지 않는 것으로 확인되는지 테스트합니다.
is_nothrow_swappable
is_nothrow_swappable_with
is_nothrow_destructible 형식이 소멸 가능하며 소멸자가 throw되지 않는 것으로 확인되는지 테스트합니다.
has_virtual_destructor 형식에 가상 소멸자가 있는지 테스트합니다.
has_unique_object_representations
is_invocable 지정된 인수 형식을 사용하여 호출 가능한 형식을 호출할 수 있는지 여부를 테스트합니다.
C++17에 추가되었습니다.
is_invocable_r 지정된 인수 형식을 사용하여 호출 가능한 형식을 호출할 수 있는지 여부를 테스트하고 결과를 지정된 형식으로 변환할 수 있는지 여부를 테스트합니다.
C++17에 추가되었습니다.
is_nothrow_invocable 지정된 인수 형식을 사용하여 호출 가능한 형식을 호출할 수 있는지 여부를 테스트하고 예외를 throw하지 않는 것으로 알려져 있습니다.
C++17에 추가되었습니다.
is_nothrow_invocable_r 지정된 인수 형식을 사용하여 호출 가능한 형식을 호출할 수 있는지 여부를 테스트하고 예외를 throw하지 않는 것으로 알려져 있으며 결과는 지정된 형식으로 변환할 수 있습니다.
C++17에 추가되었습니다.

형식 속성 쿼리

이름 설명
alignment_of 형식의 맞춤을 가져옵니다.
rank 배열 차원 수를 가져옵니다.
extent 지정된 배열 차원에서 요소의 수를 가져옵니다.

형식 관계

이름 설명
is_same 두 형식이 동일한지 테스트합니다.
is_base_of 한 형식이 다른 형식의 기본 형식인지를 테스트합니다.
is_convertible 한 가지 형식을 다른 형식으로 변환할 수 있는지 테스트합니다.

const-volatile 수정

이름 설명
add_const 형식에서 const 형식을 생성합니다.
add_volatile 형식에서 volatile 형식을 생성합니다.
add_cv 형식에서 const volatile 형식을 생성합니다.
remove_const 형식에서 비const 형식을 생성합니다.
remove_volatile 형식에서 비volatile 형식을 생성합니다.
remove_cv 형식에서 비const/비volatile 형식을 생성합니다.

참조 수정

이름 설명
add_lvalue_reference 형식에서 형식에 대한 참조를 생성합니다.
add_rvalue_reference 형식에서 형식에 대한 rvalue 참조를 생성합니다.
remove_reference 형식에서 비참조 형식을 생성합니다.

부호 수정

이름 설명
make_signed 부호가 있는 경우 형식을 생성하거나, 형식의 크기보다 크거나 같은 부호가 있는 가장 작은 형식을 생성합니다.
make_unsigned 부호가 없는 경우 형식을 생성하거나, 형식의 크기보다 크거나 같은 부호가 없는 가장 작은 형식을 생성합니다.

배열 수정

이름 설명
remove_all_extents 배열 형식에서 배열이 아닌 형식을 생성합니다.
remove_extent 배열 형식에서 요소 형식을 생성합니다.

포인터 수정

이름 설명
add_pointer 형식에서 형식에 대한 포인터를 생성합니다.
remove_pointer 입력에 대한 포인터에서 형식을 생성합니다.

기타 변환

이름 설명
aligned_storage 정렬된 형식에 대해 초기화되지 않은 메모리를 할당합니다.
aligned_union 특수한 생성자 또는 소멸자를 사용하여 정렬된 공용 구조체에 대해 초기화되지 않은 메모리를 할당합니다.
common_type 모든 매개 변수 팩 형식의 공통 형식을 생성합니다.
conditional 조건이 true이면 지정된 첫 번째 형식을 생성하고 그렇지 않으면 지정된 두 번째 형식을 생성합니다.
decay 값으로 전달된 형식을 생성합니다. 비참조, 비상수, 비휘발성 형식 또는 형식에 대한 포인터를 만듭니다.
enable_if 조건이 true이면 지정된 형식을 생성하고 그렇지 않으면 형식을 생성하지 않습니다.
invoke_result 지정된 인수 유형을 사용하는 호출 가능 형식의 반환 형식을 결정합니다.
C++17에 추가되었습니다.
result_of 지정된 인수 유형을 사용하는 호출 가능 형식의 반환 형식을 결정합니다.
C++14에서 추가되었으며 C++17에서는 더 이상 사용되지 않습니다.
underlying_type 열거형 형식에 대한 내부 정수 계열 형식을 생성합니다.

논리 연산자 특성

이름 설명
함께
분리
부정

참고 항목

<functional>