template <class T> struct hash<optional<T>>;
Специализация hash<optional<T>> включена ([unord.hash]) тогда и только тогда, когда hash<remove_const_t<T>> она включена. Когда включено, для объекта o типа optional<T>if bool(o) == true, then hash<optional<T>>()(o) должно оцениваться с тем же значением, что и hash<remove_const_t<T>>()(*o); в противном случае он принимает неопределенное значение. Функции-члены не гарантируются noexcept.