最終更新日時:
が更新

履歴 編集

class template
<type_traits>

std::is_same(C++11)

namespace std {
  template <class T, class U>
  struct is_same;
}

概要

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

効果

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

#include <type_traits>

typedef std::is_same<int, int> same;

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{};
typedef std::is_same<int, my_type> not_same;

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

typedef int my_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, C++11 mode: 4.3.4, 4.6.1
  • Visual C++: 10.0, 11.0, 12.0, 14.0