4.1 KiB
[unord.hash]
22 General utilities library [utilities]
22.10 Function objects [function.objects]
22.10.19 Class template hash [unord.hash]
The unordered associative containers defined in [unord] use specializations of the class template hash ([functional.syn]) as the default hash function.
Each specialization of hash is either enabled or disabled, as described below.
[Note 1:
Enabled specializations meet the Cpp17Hash requirements, and disabled specializations do not.
â end note]
Each header that declares the template hash provides enabled specializations of hash for nullptr_t and all cv-unqualified arithmetic, enumeration, and pointer types.
For any type Key for which neither the library nor the user provides an explicit or partial specialization of the class template hash,hash is disabled.
If the library provides an explicit or partial specialization of hash, that specialization is enabled except as noted otherwise, and its member functions are noexcept except as noted otherwise.
If H is a disabled specialization of hash, these values are false:is_default_constructible_v,is_copy_constructible_v,is_move_constructible_v,is_copy_assignable_v, andis_move_assignable_v.
Disabled specializations of hash are not function object types ([function.objects]).
[Note 2:
This means that the specialization of hash exists, but any attempts to use it as a Cpp17Hash will be ill-formed.
â end note]
An enabled specialization hash will:
meet the Cpp17Hash requirements (Table 37), with Key as the function call argument type, the Cpp17DefaultConstructible requirements (Table 30), the Cpp17CopyAssignable requirements (Table 34), the Cpp17Swappable requirements ([swappable.requirements]),
meet the requirement that if k1 == k2 is true, h(k1) == h(k2) is also true, where h is an object of type hash and k1 and k2 are objects of type Key;
meet the requirement that the expression h(k), where h is an object of type hash and k is an object of typeKey, shall not throw an exception unless hash is a program-defined specialization.