読者です 読者をやめる 読者になる 読者になる

とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

type_traits入門 std::is_same

std::is_same

template <class T, class U>
struct is_same;

is_same は T と U の cv修飾子(constやvolatileのこと)を含む型が同じときに true を返すメタ関数。型の世界での operator== みたいなもの。型のテストでよく使う。
以下では is_same のテストで is_same を使っているので分かりにくいかも。

#include<type_traits>

static_assert(std::is_same<int, int>::value == true, "::value");
static_assert(std::is_same<std::is_same<int, int>::value_type, bool>::value, "::value_type");
static_assert(std::is_same<std::is_same<int, int>::type, std::true_type>::value, "::type");
constexpr bool test = std::is_same<int, int>(); // constexpr operator bool()
static_assert(test == true, "");

static_assert(std::is_same<int const, int const>::value == true, "");
static_assert(std::is_same<int*, int*>::value == true, "");
static_assert(std::is_same<int&, int&>::value == true, "");
static_assert(std::is_same<int[1], int[1]>::value == true, "");
static_assert(std::is_same<unsigned, unsigned>::value == true, "");

static_assert(std::is_same<int, int const>::value == false, "");
static_assert(std::is_same<int, int*>::value == false, "");
static_assert(std::is_same<int, int&>::value == false, "");
static_assert(std::is_same<int, int[1]>::value == false, "");
static_assert(std::is_same<int, unsigned>::value == false, "");

int main(){}