C++ 11で型が等しいかどうかを確認するにはどうすればよいですか?
std::uint32_t == unsigned; //#1
そして別のスニペット
template<typename T> struct A{
string s = T==unsigned ? "unsigned" : "other";
}
C++ 11以降はstd::is_same<T,U>::value
を使用できます。
ここで、T
とU
はタイプであり、value
は同等の場合はtrue
になり、同等の場合はfalse
になります。そうではありません。
これはコンパイル時に評価されることに注意してください。
楽しみのために、これを試してください:
template<class T>
struct tag_t { using type=T; constexpr tag_t() {}; };
template<class T>
constexpr tag_t<T> tag{};
template<class T, class U>
constexpr std::is_same<T, U> operator==( tag_t<T>, tag_t<U> ) { return {}; }
template<class T, class U>
constexpr std::integral_constant<bool, !(tag<T> == tag<U>)> operator!=( tag_t<T>, tag_t<U> ) { return {}; }
これで、tag<T> == tag<unsigned>
と入力できます。結果はconstexpr
であり、戻り値の型でエンコードされます。
実例 。