首页 > 解决方案 > std::same_as 和 std::is_same 之间的区别

问题描述

我正在阅读 的文档,std::same_as看起来它只是转发到std::is_same_v. cppreference 具有以下示例实现:

namespace detail {
    template< class T, class U >
    concept SameHelper = std::is_same_v<T, U>;
}
 
template< class T, class U >
concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>;

如果是可交换的,为什么&&偶数是必要的?std::is_same_v如果std::same_as具有相同的语义,我需要它做什么?我也可以std::is_same_v用作这样的约束:

template <typename T>
void test(T x) requires std::is_same_v<T, int> {}

标签: c++c++20typetraitsc++-concepts

解决方案


推荐阅读