Почему равенство проверяется дважды в same_as?
Глядя на "возможный" раздел реализацииstd::same_as
что-то мне кажется странным:
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>;
Проверка на равенство типов выполняется дважды, один раз как
T==U
а второй как
U==T
. Учитывая, что равенство по своей природе симметрично, зачем нужна дополнительная проверка?