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

履歴 編集

class template
<type_traits>

std::is_same(C++11)

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

処理系

参照