30#if UINTPTR_MAX == UINT64_MAX
32#elif UINTPTR_MAX == UINT32_MAX
41 void hash_combine(std::size_t& result, T&& value)
noexcept(
42 noexcept(std::declval<std::hash<std::decay_t<T>>>()(std::forward<T>(value)))) {
43 using pure_type = std::decay_t<T>;
44 constexpr std::size_t magic_factor = 0x9E3779B9;
45 auto hash = std::hash<pure_type>{}(std::forward<T>(value));
47 result ^=
hash + magic_factor + (result << 6) + (result >> 2);
49#elif defined(ES_PTR64)
51 void hash_combine(std::size_t& result, T&& value)
noexcept(
52 noexcept(std::declval<std::hash<std::decay_t<T>>>()(std::forward<T>(value)))) {
53 using pure_type = std::decay_t<T>;
54 constexpr std::size_t magic_factor = 0xC6A4A7935BD1E995;
55 auto hash = std::hash<pure_type>{}(std::forward<T>(value));
62 result *= magic_factor;
68#error "Unknown pointer length."
71 template <
typename... Args>
72 std::size_t hash_arbitrary(Args&&... args)
noexcept(
73 (
noexcept(hash_combine(std::declval<std::size_t&>(), std::forward<Args>(args))) && ...)) {
76 return (hash_combine(result, std::forward<Args>(args)), ..., result);
std::size_t hash(const BasicJsonType &j)
hash a JSON value
Definition json.hpp:6036