diff --git a/include/boost/unordered/detail/implementation.hpp b/include/boost/unordered/detail/implementation.hpp index 7e1be8cd..225fbee2 100644 --- a/include/boost/unordered/detail/implementation.hpp +++ b/include/boost/unordered/detail/implementation.hpp @@ -337,6 +337,23 @@ struct compressed compressed& operator=(compressed const&); }; +//////////////////////////////////////////////////////////////////////////// +// pair_traits +// +// Used to get the types from a pair without instantiating it. + +template struct pair_traits +{ + typedef typename Pair::first_type first_type; + typedef typename Pair::second_type second_type; +}; + +template struct pair_traits > +{ + typedef T1 first_type; + typedef T2 second_type; +}; + #if defined(BOOST_MSVC) #pragma warning(push) #pragma warning(disable : 4512) // assignment operator could not be generated. @@ -3186,10 +3203,11 @@ template struct set_extractor #endif }; -template struct map_extractor +template struct map_extractor { typedef ValueType value_type; - typedef typename boost::remove_const::type key_type; + typedef typename boost::remove_const::first_type>::type key_type; static key_type const& extract(value_type const& v) { return v.first; } diff --git a/include/boost/unordered/detail/map.hpp b/include/boost/unordered/detail/map.hpp index dc23931b..6758036c 100644 --- a/include/boost/unordered/detail/map.hpp +++ b/include/boost/unordered/detail/map.hpp @@ -29,7 +29,7 @@ template struct map typedef typename pick::link_pointer link_pointer; typedef boost::unordered::detail::table_impl table; - typedef boost::unordered::detail::map_extractor extractor; + typedef boost::unordered::detail::map_extractor extractor; typedef typename boost::unordered::detail::pick_policy::type policy; @@ -62,7 +62,7 @@ struct multimap typedef typename pick::link_pointer link_pointer; typedef boost::unordered::detail::grouped_table_impl table; - typedef boost::unordered::detail::map_extractor extractor; + typedef boost::unordered::detail::map_extractor extractor; typedef typename boost::unordered::detail::pick_policy::type policy;