The specialization hash<optional<T>> is enabled ([unord.hash])
if and only if hash<remove_const_t<T>> is enabled.
When enabled, for an object o of type optional<T>,
if bool(o)==true, then hash<optional<T>>()(o)
evaluates to the same value as hash<remove_const_t<T>>()(*o);
otherwise it evaluates to an unspecified value.
The member functions are not guaranteed to be noexcept.