I want to pass in my own hash functor and comparator to an unordered_set initialization. It fails compilation on g++ 4.2.1, boost version 1.42. It's not clear why, since a similar initialization of an STL set container seems to work fine... see below for the code and compilation failure. Any insight would be highly appreciated. #include <set> #include <boost/tr1/unordered_set.hpp> class foo_compare { public: foo_compare(bool is_gt) : m_is_gt(is_gt) {} bool operator() (int a, int b) { if (m_is_gt) return a > b; else return a < b; } bool m_is_gt; }; class foo_hash1 { public: foo_hash1() {} ~foo_hash1() {} size_t operator() (int val) const { return val % 19; } }; using namespace std; typedef set<int, foo_compare> MySetT; typedef std::tr1::unordered_set<int, foo_hash1, foo_compare> MyUnorderedSetT; size_t hash_func_1(int val) { return val % 19; } class Foo { public: Foo(bool is_gt) : m_set(foo_compare(is_gt)), // this initialization is OK m_unordered_set(foo_hash1() , // this one fails compilation! why ? foo_compare(is_gt)) {} MySetT m_set; MyUnorderedSetT m_unordered_set; }; int main() { bool is_greater_than = true; Foo myfoo(is_greater_than); return 0; } g++ my_unordered.cpp -I ~/temp/boost_1_42_0 my_unordered.cpp: In constructor Foo::Foo(bool)â: my_unordered.cpp:43: error: no matching function for call to âboost::unordered_set<int, foo_hash1, foo_compare, std::allocator<int> >::unordered_set(foo_hash1, foo_compare)â /home/asinha/temp/boost_1_42_0/boost/unordered/unordered_set.hpp:175: note: candidates are: boost::unordered_set<T, H, P, A>::unordered_set(boost::unordered_detail::move_from<boost::unordered_set<T, H, P, A> >) [with T = int, H = foo_hash1, P = foo_compare, A = std::allocator<int>] /home/asinha/temp/boost_1_42_0/boost/unordered/unordered_set.hpp:121: note: boost::unordered_set<T, H, P, A>::unordered_set(const boost::unordered_set<T, H, P, A>&, const A&) [with T = int, H = foo_hash1, P = foo_compare, A = std::allocator<int>] /home/asinha/temp/boost_1_42_0/boost/unordered/unordered_set.hpp:115: note: boost::unordered_set<T, H, P, A>::unordered_set(const A&) [with T = int, H = foo_hash1, P = foo_compare, A = std::allocator<int>] /home/asinha/temp/boost_1_42_0/boost/unordered/unordered_set.hpp:110: note: boost::unordered_set<T, H, P, A>::unordered_set(size_t, const H&, const P&, const A&) [with T = int, H = foo_hash1, P = foo_compare, A = std::allocator<int>] /home/asinha/temp/boost_1_42_0/boost/unordered/unordered_set.hpp:43: note: boost::unordered_set<int, foo_hash1, foo_compare, std::allocator<int> >::unordered_set(const boost::unordered_set<int, foo_hash1, foo_compare, std::allocator<int> >&) Aman Sinha