• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class template
    <type_traits>

    std::is_trivially_copy_assignable

    namespace std {
      template <class T>
      struct is_trivially_copy_assignable;
    
      template <class T>
      inline constexpr bool is_trivially_copy_assignable_v
        = is_trivially_copy_assignable<T>::value;          // C++17
    }
    

    概要

    Tがトリビアルにコピー代入可能か調べる。

    要件

    T完全型であるか、const/volatile修飾された(あるいはされていない)voidか、要素数不明の配列型でなければならない。

    効果

    is_trivially_copy_assignableは、型Tがトリビアルにコピー代入可能であるならばtrue_typeから派生し、そうでなければfalse_typeから派生する。

    以下の条件がtrueである場合に、トリビアルにコピー代入可能であると見なされる:

    • C++11 : is_trivially_assignable<T&, const T&>::value == true
    • C++14 : 参照可能な型Tに対しては、is_trivially_assignable<T&, const T&>::value == trueと同じ結果となり、それ以外はfalseと見なされる。
      • 参照可能な型とは、以下のいずれかの条件に合致する型である:

    #include <type_traits>
    #include <string>
    
    struct X {
      // トリビアルなコピー代入演算子を持っている
    };
    
    struct Y {
      // 非トリビアルなコピー代入演算子を持っている
      Y& operator=(const Y&) { return *this; }
    };
    
    struct Z {
      // 非トリビアルなコピー代入演算子を持つ型を包含している
      std::string s;
    
      // Z型は非トリビアルなコピー代入演算子を持つ
    };
    
    // 組み込み型は全てトリビアルにコピー代入可能
    static_assert(
      std::is_trivially_copy_assignable<int>::value == true,
      "int is trivially copy assignable");
    
    // トリビアルなコピー代入演算子を持っている型
    static_assert(
      std::is_trivially_copy_assignable<X>::value == true,
      "X is trivially copy assignable");
    
    // 非トリビアルなコピー代入演算子を持っている型
    static_assert(
      std::is_trivially_copy_assignable<Y>::value == false,
      "Y isn't trivially copy assignable");
    
    // 非トリビアルなコピー代入演算子を持つ型を包含する型
    static_assert(
      std::is_trivially_copy_assignable<Z>::value == false,
      "Z isn't trivially copy assignable");
    
    int main() {}
    

    出力

    バージョン

    言語

    • C++11

    処理系

    参照