简介
template< class T, class U > struct is_same;
如果 T 和 U 类型相同,is_same struct 的静态成员 value 的值为 true,否则为 false。
源码
template <class _Ty, _Ty _Val> struct integral_constant { static constexpr _Ty value = _Val; using value_type = _Ty; using type = integral_constant; constexpr operator value_type() const noexcept { return value; } _NODISCARD constexpr value_type operator()() const noexcept { return value; } }; template <bool _Val> using bool_constant = integral_constant<bool, _Val>; template <class, class> _INLINE_VAR constexpr bool is_same_v = false; // determine whether arguments are the same type template <class _Ty> _INLINE_VAR constexpr bool is_same_v<_Ty, _Ty> = true; template <class _Ty1, class _Ty2> struct is_same : bool_constant<is_same_v<_Ty1, _Ty2>> {};
需要理解的是
constexpr bool is_same_v<_Ty, _Ty> = true
这种写法是变量模板,c++14 及以上版本支持,达到在编译期让相同类型匹配到 is_same_v = true 的结果。2 个相同类型匹配到 is_same_v = true,2 个不同类型匹配到 is_same_v = false,继续展开模板,和 true_type, false_type 类似,value 会被模板参数设置。
参考
- ‣