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つの型T
とU
が同じ型か調べる
効果
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(){}
28
#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;
出力
バージョン
言語
- C++11
処理系
- GCC: 4.3.4 ✅, 4.6.1 ✅
- Visual C++: 2010 ✅, 2012 ✅, 2013 ✅, 2015 ✅