A type H meets the Hash requirements if:

it is a function object type ([function.objects]),

it satisfies the requirements of CopyConstructible and Destructible ([utility.arg.requirements]), and

the expressions shown in Table [hash] are valid and have the indicated semantics.

Given Key is an argument type for function objects of type H, in Table [hash] h is a value of type (possibly const) H, u is an lvalue of type Key, and k is a value of a type convertible to (possibly const) Key.

Table 26 — Hash requirements

Expression | Return type | Requirement |

h(k) | size_t |
The value returned shall depend only on the argument
k. [ Note: Thus all evaluations of the expression h(k) with the
same value for k yield the same result. — end note ] [ Note: For two different
values t1 and t2, the probability that h(t1) and h(t2)
compare equal should be very small, approaching 1.0 / numeric_limits<size_t>::max().
— end note ] |

h(u) | size_t | Shall not modify u. |