I was reading through the documentation of std::same_as and it looks like it just forwards to std::is_same_v. cppreference has the following example implementation:
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>;
Why is the && even necessary if std::is_same_v is commutative? And if std::same_as has identical semantics, what do I need it for? I can also use std::is_same_v as a constraint like this:
template <typename T>
void test(T x) requires std::is_same_v<T, int> {}