13 { std::hash<T>{}(v) } -> std::convertible_to<size_t>;
18 size_t hash_combine(
size_t seed,
const T& v)
noexcept(
noexcept(std::hash<T>{}(v)))
20 return seed ^ (std::hash<T>{}(v) + 0x9e3779b9 + (seed<<6) + (seed>>2));
24 size_t hash_of(
const T& v)
noexcept(
noexcept(std::hash<T>{}(v)))
26 return std::hash<T>{}(v);
29 template<Hashable
T, Hashable... Ts>
35 template<
typename Range>
39 for (
const auto& el : range) {
50 template<
typename Key>
53 template<
typename T1,
typename T2>
54 struct Hasher<std::pair<T1, T2>> final {
55 size_t operator()(
const std::pair<T1, T2>& p)
const noexcept(
noexcept(
hash_of(p.first, p.second)))
57 return hash_of(p.first, p.second);
Definition hash_helpers.h:12
Definition custom_decoration_generator.h:5
size_t hash_combine(size_t seed, const T &v) noexcept(noexcept(std::hash< T >{}(v)))
Definition hash_helpers.h:18
size_t hash_of(const T &v) noexcept(noexcept(std::hash< T >{}(v)))
Definition hash_helpers.h:24
size_t hash_range(const Range &range) noexcept(noexcept(hash_combine(0, *std::ranges::begin(range))))
Definition hash_helpers.h:36
size_t operator()(const std::pair< T1, T2 > &p) const noexcept(noexcept(hash_of(p.first, p.second)))
Definition hash_helpers.h:55
Definition hash_helpers.h:51