cppreference 中的此页面提到std::hash
已专门用于std::optional
,但未指定对象脱离时的行为。我可以想到不同的行为:
- 它可以抛出一个
std::bad_optional_access
, 以保持一致std::optional::value
- 它可以为每个 disengaged 返回相同的哈希
std::optional<T>
,这样 2 disengaged 对象将具有相同的哈希。 - 它可以返回一个
std::optional<std::hash<std::optional<T>>>