In particular, std::set and std::map expect objects to be less-than-comparable and std::unordered_set and std::unordered_map to have a specialization of std::hash.
C++11 stuff could go in a separate file that is conditionally included based on the C++ version.