From 79cf0c4bfb4117b3864420ff80bb4b3a5ce11d74 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Thu, 23 Feb 2017 20:14:27 +0000 Subject: [PATCH] pair_traits for getting pair types without instantiating. I was having some problems in an abandoned prototype with incomplete types, I'm not sure I will have this problem now, but I'm keeping this anyway, as it seems useful. --- .../boost/unordered/detail/implementation.hpp | 22 +++++++++++++++++-- include/boost/unordered/detail/map.hpp | 4 ++-- 2 files changed, 22 insertions(+), 4 deletions(-) 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;