[ 2016-06-14, Daniel comments ]
The problematic part of the P/R is that it describes constraints that would be suitable if they were constraints
for user-code, but they are not suitable as requirements imposed on implementations to provide certain guarantees
for clients of the Library. The guarantees should be written in terms of testable compile-time expressions, e.g. based on
negative results of is_default_constructible<hash<X>>::value,
std::is_copy_constructible<hash<X>>::value, and possibly also
std::is_destructible<hash<X>>::value. How an implementation realizes these negative
results shouldn't be specified, though, but the expressions need to be well-formed and well-defined.
This wording is relative to N4582.
Insert a new paragraph after [unord.hash]/2
-2- The template specializations shall meet the requirements of class template hash (20.12.14).
-?- For any type that is not of integral or enumeration type, or for which neither the library nor the user provides an explicit specialization of the class template hash, the specialization of hash does not meet any of the Hash requirements, and is not DefaultConstructible nor MoveAssignable. [Note: this means that the specialization of hash exists, but any attempts to use it as a Hash will be ill-formed. — end note]