I am not sure if it is relevant anymore, as C++14 does not have std::optional
ultimately. The intention (although not reflected in the standardese initially) has always been that the hash of a disengaged optional object returns an unspecified value, as Jonathan said.
This intent is reflected in the Fundamentals TS.
The idea is that the implementation of the Standard Library chooses how it wants to represent a disengaged optional<T>
and documents it itself. It can choose a different value for different types, and also a different value in debug and release mode.