The Emplaceble.h test header defines hash function for containers used during testing. For this purpose, it creates a specialization of struct hash template defined in namespace std. However, to get access to struct hash it includes wrong header <utility>. According to C++11 standard, struct hash should be defined in the following standard headers:
- <system_error> (section [syserr]);
- <bitset> (section [template.bitset]);
- <memory> (section [memory.syn]);
- <functional> (sections [function.objects], [unord.hash]);
- <typeindex> (section [type.index.synopsis]);
- <string> (section [string.classes]);
- <vector> (section [sequences.general]);
- <thread> (section [thread.thread.id]).
Header <utility> is not in this list even in the later editions of the standard. As a result, tests including Emplaceble.h test header won't compile against some conformant libraries. The choice for <functional> as a substitute is made in accordance with the recommendation to applications.