次の方法で共有


<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;

パラメーター

目的
代入を受け取るオブジェクトの型。

送信元
値を渡すオブジェクトの型。

解説

評価されていない式 declval<To>() = declval<From>() は整形式である必要があります。 FromTo の両方とも完全な型、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
照会する型。

解説

型への右辺値参照を型の参照に割り当てる事ができる場合、その型は移動代入可能です。 型述語は 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

型が自明なコピー代入演算子を持つかどうかをテストします。

template <class Ty>
struct is_trivially_copy_assignable;

パラメーター

T
照会する型。

解説

T が自明なコピー代入演算子を持つクラスの場合、型述語のインスタンスは true を保持します。それ以外の場合は false を保持します。

クラス T の代入コンストラクターが自明となるのは、暗黙的に指定されている場合、クラス T に仮想関数がない場合、クラス T に仮想基底がない場合、クラス型の非静的データ メンバーすべてのクラスに自明な代入演算子が含まれており、かつクラスの型配列の非静的データ メンバーすべてでクラスに自明な代入演算子が含まれている場合です。

is_trivially_move_assignable

型が自明なムーブ代入演算子を持つかどうかをテストします。

template <class Ty>
struct is_trivially_move_assignable;

パラメーター

Ty
照会する型。

解説

Ty が自明な移動代入演算子を持つクラスの場合、型述語のインスタンスは true を保持します。それ以外の場合は false を保持します。

次の条件が満たされる場合、クラス Ty の移動代入演算子は自明です。

暗黙的に指定されている

クラス Ty に仮想関数がない

クラス Ty に仮想基底がない

クラス型のすべての非静的データ メンバーのクラスに自明なムーブ代入演算子がある

クラスの型配列のすべての非静的データ メンバーのクラスに自明なムーブ代入演算子がある

is_trivially_move_constructible

型に自明な移動コンストラクターが存在するかどうかをテストします。

template <class Ty>
struct is_trivially_move_constructible;

パラメーター

Ty
照会する型。

解説

Ty が自明な移動コンストラクターを持つクラスである場合、型述語のインスタンスは true を保持します。それ以外の場合は、false を保持します。

クラス Ty の移動コンストラクターが自明であるのは、以下の場合です。

暗黙的に宣言されている

そのパラメーターの型が暗黙的な宣言のものと同じである

クラス Ty に仮想関数がない

クラス Ty に仮想基底がない

クラスに揮発性の非静的データ メンバーがない

クラス Ty のすべての直接基底に自明な移動コンストラクターがある

クラス型のすべての非静的データ メンバーのクラスに自明な移動コンストラクターがある

クラスの型配列のすべての非静的データ メンバーのクラスに自明な移動コンストラクターがある

関連項目

<type_traits>