#include struct my_key { int m_i; my_key() : m_i(0){}; bool operator==(const my_key &rhs) const { return m_i == rhs.m_i; } operator std::size_t () const { return m_i; } }; #ifdef BOOST_HAS_TR1_HASH namespace std { namespace tr1 { #else namespace boost { #endif // def BOOST_HAS_TR1_HASH template<> struct hash { std::size_t operator()(const my_key& r) const { return (std::size_t)r; } }; #ifdef BOOST_HAS_TR1_HASH } // namespace tr1 } // namespace std #else } // namespace boost #endif // def BOOST_HAS_TR1_HASH int main() { return 0; }