다음을 통해 공유


<type_traits> 함수

is_assignable
is_copy_assignable
is_copy_constructible
is_default_constructible
is_move_assignable
is_move_constructible
is_nothrow_move_assignable
is_nothrow_swappable
is_nothrow_swappable_with
is_swappable
is_swappable_with
is_trivially_copy_assignable
is_trivially_move_assignable
is_trivially_move_constructible

is_assignable

From 형식의 값을 To 형식에 할당할 수 있는지 여부를 테스트합니다.

template <class To, class From>
struct is_assignable;

매개 변수

받는 사람
할당을 받는 개체의 형식입니다.

From
값을 제공하는 개체의 형식입니다.

설명

평가되지 않은 declval<To>() = declval<From>() 식은 올바른 형식이어야 합니다. From과 To는 모두 전체 형식void이거나 알 수 없는 바인딩된 배열이어야 합니다.

is_copy_assignable

할당 시 형식을 복사할 수 있는지 여부를 테스트합니다.

template <class Ty>
struct is_copy_assignable;

매개 변수

Ty
형식이 쿼리입니다.

설명

형식 조건자의 인스턴스는 형식 Ty가 복사 할당 연산자가 있는 클래스인 경우 true이고, 그렇지 않으면 false를 보유합니다. is_assignable<Ty&, const Ty&와> 동일합니다.

is_copy_constructible

형식에 복사 생성자가 있는지 테스트합니다.

template <class Ty>
struct is_copy_constructible;

매개 변수

Ty
형식이 쿼리입니다.

설명

형식 조건자의 인스턴스는 Ty 형식이 복사 생성자가 있는 클래스인 경우 true이고, 그렇지 않으면 false를 보유합니다.

예시

#include <type_traits>
#include <iostream>

struct Copyable
{
    int val;
};

struct NotCopyable
{
   NotCopyable(const NotCopyable&) = delete;
   int val;

};

int main()
{
    std::cout << "is_copy_constructible<Copyable> == " << std::boolalpha
        << std::is_copy_constructible<Copyable>::value << std::endl;
    std::cout << "is_copy_constructible<NotCopyable> == " << std::boolalpha
        << std::is_copy_constructible<NotCopyable>::value << std::endl;

    return (0);
}
is_copy_constructible<Copyable> == true
is_copy_constructible<NotCopyable > == false

is_default_constructible

형식에 기본 생성자가 있는지 테스트합니다.

template <class Ty>
struct is_default_constructible;

매개 변수

T
형식이 쿼리입니다.

설명

형식 조건자의 인스턴스는 T 형식이 기본 생성자가 있는 클래스 형식이면 true이고, 그렇지 않으면 false입니다. 이것은 조건자 is_constructible<T>에 해당합니다. T 형식은 전체 형식void이거나 알 수 없는 바인딩된 배열이어야 합니다.

예시

#include <type_traits>
#include <iostream>

struct Simple
{
    Simple() : val(0) {}
    int val;
};

struct Simple2
{
    Simple2(int v) : val(v) {}
    int val;
};

int main()
{
    std::cout << "is_default_constructible<Simple> == " << std::boolalpha
        << std::is_default_constructible<Simple>::value << std::endl;
    std::cout << "is_default_constructible<Simple2> == " << std::boolalpha
        << std::is_default_constructible<Simple2>::value << std::endl;

    return (0);
}
is_default_constructible<Simple> == true
is_default_constructible<Simple2> == false

is_move_assignable

형식을 이동 할당할 수 있는지 테스트합니다.

template <class T>
struct is_move_assignable;

매개 변수

T
형식이 쿼리입니다.

설명

형식에 대한 rvalue 참조를 형식에 대한 참조에 할당할 수 있는 경우 형식은 이동 할당할 수 있습니다. 형식 조건자는 is_assignable<T&, T&&>와 같습니다. 이동 할당 가능한 형식에는 컴파일러에서 생성되었거나 사용자가 정의한 이동 할당 연산자를 포함하는 참조 가능한 스칼라 형식과 클래스 형식이 포함됩니다.

is_move_constructible

형식에 이동 생성자가 있는지 테스트합니다.

template <class T>
struct is_move_constructible;

매개 변수

T
평가할 형식입니다.

설명

이동 작업을 사용하여 T 형식을 생성할 수 있는 경우 true로 평가되는 형식 조건자입니다. 이 조건자는 is_constructible<T, T&&>과 같습니다.

is_nothrow_move_assignable

형식에 이동 할당 연산자가 nothrow 있는지 여부를 테스트합니다.

template <class Ty>
struct is_nothrow_move_assignable;

매개 변수

Ty
형식이 쿼리입니다.

설명

형식 조건자의 인스턴스는 Ty 형식에 nothrow 이동 할당 연산자가 있는 경우 true를 유지하고, 그렇지 않으면 false를 보유합니다.

is_nothrow_swappable

template <class T> struct is_nothrow_swappable;

is_nothrow_swappable_with

template <class T, class U> struct is_nothrow_swappable_with;

is_swappable

template <class T> struct is_swappable;

is_swappable_with

template <class T, class U> struct is_swappable_with;

is_trivially_copy_assignable

형식에 Trivial 복사 할당 연산자가 있는지 여부를 테스트합니다.

template <class Ty>
struct is_trivially_copy_assignable;

매개 변수

T
형식이 쿼리입니다.

설명

형식 조건자의 인스턴스는 T 형식이 간단한 복사 할당 연산자가 있는 클래스인 경우 true이고, 그렇지 않으면 false를 보유합니다.

클래스 T에 대한 할당 생성자는 암시적으로 제공된 경우, 클래스 T에는 가상 함수가 없고, T 클래스에는 가상 기반이 없으며, 클래스 형식의 모든 비정적 데이터 멤버의 클래스에는 간단한 할당 연산자가 있으며, 클래스 배열 형식의 모든 비정적 데이터 멤버의 클래스에는 간단한 할당 연산자가 있습니다.

is_trivially_move_assignable

형식에 trivial 이동 할당 연산자가 있는지 여부를 테스트합니다.

template <class Ty>
struct is_trivially_move_assignable;

매개 변수

Ty
형식이 쿼리입니다.

설명

형식 조건자의 인스턴스는 Ty 형식이 간단한 이동 할당 연산자가 있는 클래스인 경우 true이고, 그렇지 않으면 false를 보유합니다.

클래스 Ty 에 대한 이동 할당 연산자는 다음과 같은 경우 간단합니다.

암시적으로 제공된 경우

클래스 Ty 에 가상 함수가 없습니다.

클래스 Ty 에 가상 베이스가 없습니다.

클래스 형식의 모든 비정적 데이터 멤버의 클래스에 trivial 이동 할당 연산자가 있는 경우

클래스 형식 배열의 모든 비정적 데이터 멤버의 클래스에 trivial 이동 할당 연산자가 있는 경우

is_trivially_move_constructible

형식에 Trivial 이동 생성자가 있는지 여부를 테스트합니다.

template <class Ty>
struct is_trivially_move_constructible;

매개 변수

Ty
형식이 쿼리입니다.

설명

형식 조건자의 인스턴스는 Ty 형식이 간단한 이동 생성자가 있는 클래스인 경우 true이고, 그렇지 않으면 false를 보유합니다.

다음과 같은 경우 클래스 Ty 에 대한 이동 생성자는 간단합니다.

암시적으로 선언된 경우

매개 변수 형식이 암시적 선언의 형식과 동일한 경우

클래스 Ty 에 가상 함수가 없습니다.

클래스 Ty 에 가상 베이스가 없습니다.

클래스에 휘발성 비정적 데이터 멤버가 없는 경우

클래스 Ty 의 모든 직접 베이스에는 간단한 이동 생성자가 있습니다.

클래스 형식의 모든 비정적 데이터 멤버의 클래스에 Trivial 이동 생성자가 있는 경우

클래스 배열 형식의 모든 비정적 데이터 멤버의 클래스에 Trivial 이동 생성자가 있는 경우

참고 항목

<type_traits>