17struct CachedHash final {
24constexpr bool operator==(
const CachedHash<T>& x,
const CachedHash<T>& y) {
25 return x.hash == y.hash && x.key == y.key;
30constexpr bool operator!=(
const CachedHash<T>& x,
const CachedHash<T>& y) {
31 return !(x.key == y.key);
35template <
class Equal,
class = std::enable_if_t<!std::is_final_v<Equal>>>
38 explicit constexpr CachedHashKeyEqual(
const Equal& eq)
43 constexpr bool operator()(
const CachedHash<T>& x,
const CachedHash<T>& y)
const {
44 return Equal::operator()(x.key, y.key);
51 explicit constexpr CachedHashKeyEqual(
const Equal& eq)
56 constexpr bool operator()(
const CachedHash<T>& x,
const CachedHash<T>& y)
const {
57 return equality_(x.key, y.key);
69struct std::hash<USERVER_NAMESPACE::utils::CachedHash<T>> {
70 constexpr std::size_t operator()(
const USERVER_NAMESPACE::utils::CachedHash<T>& value)
const noexcept {