cppref 提供了 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>;
为什么不直接按照以下方式实现:
template<class T, class U>
concept same_as = std::is_same_v<T, U> && std::is_same_v<U, T>;
甚至更短:
template<class T, class U>
concept same_as = std::is_same_v<T, U>;
std::is_same_v
不是概念(concept),因此same_as<T, U>
将是一个原子约束,其表达式为std::is_same_v<T, U> && std::is_same_v<U, T>
。 - Jarod42