absl's Hash::combine functions are already hashing.
What we're doing is adding a tenantId's hash to the hash,
which is hashing twice.
std::size_t hash() const {
return OID::Hasher()(_oid);
}
/**
* Functor compatible with std::hash for std::unordered_{map,set}
*/
struct Hasher {
std::size_t operator()(const TenantId& tenantId) const {
return tenantId.hash();
}
};
/**
* Hash function compatible with absl::Hash for absl::unordered_{map,set}
*/
template <typename H>
friend H AbslHashValue(H h, const TenantId& tenantId) {
return H::combine(std::move(h), tenantId.hash());
}
The idiom for absl's composable hashing would be that you combine the _oid directly to h and then OID would have its own AbslHashValue nonmember function that ultimately combines in the bytes of the _oid as a range.