Я читал документацию 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> {}