为什么 std::same_as 以如此奇怪的方式实现?
Why is std::same_as implemented in such a weird way?
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>;
它是 t handle subsumption 这只发生在概念上。
有了你的提议,
same_as<T, U>
不包含 same_as<U, T>
.
进一步阅读cppreference。
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>;
它是 t handle subsumption 这只发生在概念上。
有了你的提议,
same_as<T, U>
不包含 same_as<U, T>
.
进一步阅读cppreference。