• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    class template
    <type_traits>

    std::is_same

    namespace std {
      template <class T, class U>
      struct is_same;
    
      template <class T, class U>
      inline constexpr bool is_same_v = is_same<T, U>::value; // C++17
    }
    

    概要

    2つの型TUが同じ型か調べる

    効果

    is_sameは、CV修飾子が同じであることを含め型Tと型Uが同じ型であるならばtrue_typeから派生し、そうでなければfalse_typeから派生する。

    #include <type_traits>
    
    using same = std::is_same<int, int>;
    
    static_assert(same::value == true, "int == int");
    static_assert(std::is_same<same::value_type, bool>::value, "value_type == bool");
    static_assert(std::is_same<same::type, std::true_type>::value, "type == true_type");
    static_assert(same() == true, "same() == true");
    
    struct my_type{};
    using not_same = std::is_same<int, my_type>;
    
    static_assert(not_same::value == false, "int != my_type");
    static_assert(std::is_same<not_same::value_type, bool>::value, "value_type == bool");
    static_assert(std::is_same<not_same::type, std::false_type>::value, "type == false_type");
    static_assert(not_same() == false, "not_same() == false");
    
    using my_int = int;
    
    static_assert(std::is_same<int, my_int>::value == true, "int == my_int");
    static_assert(std::is_same<my_type, my_type>::value == true, "my_type == my_type");
    
    static_assert(std::is_same<int, const int>::value == false, "int != const int");
    static_assert(std::is_same<int, int*>::value == false, "int != int*");
    static_assert(std::is_same<int, my_type>::value == false, "int != my_type");
    
    int main(){}
    

    出力

    バージョン

    言語

    • C++11

    処理系

    • GCC: 4.3.4 , 4.6.1
    • Visual C++: 2010 , 2012 , 2013 , 2015

    参照