diff --git a/include/boost/unordered/unordered_map.hpp b/include/boost/unordered/unordered_map.hpp index 4a060358..9d80d743 100644 --- a/include/boost/unordered/unordered_map.hpp +++ b/include/boost/unordered/unordered_map.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) #include @@ -50,9 +51,9 @@ namespace boost { typedef K key_type; typedef T mapped_type; typedef std::pair value_type; - typedef H hasher; - typedef P key_equal; - typedef A allocator_type; + typedef typename boost::type_identity::type hasher; + typedef typename boost::type_identity

::type key_equal; + typedef typename boost::type_identity::type allocator_type; private: typedef boost::unordered::detail::map types; @@ -931,7 +932,7 @@ namespace boost { template using iter_to_alloc_t = typename std::pair const, iter_val_t >; - } + } // namespace detail template >, class Allocator = std::allocator< - boost::unordered::detail::iter_to_alloc_t > > + boost::unordered::detail::iter_to_alloc_t >, + class = boost::enable_if_t >, + class = boost::enable_if_t >, + class = boost::enable_if_t >, + class = boost::enable_if_t > > unordered_map(InputIterator, InputIterator, std::size_t = boost::unordered::detail::default_bucket_count, Hash = Hash(), Pred = Pred(), Allocator = Allocator()) - ->unordered_map, + -> unordered_map, boost::unordered::detail::iter_val_t, Hash, Pred, Allocator>; - template , - class Pred = std::equal_to, - class Allocator = std::allocator > > - unordered_map(std::initializer_list >, + template >, + class Pred = std::equal_to >, + class Allocator = std::allocator >, + class = boost::enable_if_t >, + class = boost::enable_if_t >, + class = boost::enable_if_t > > + unordered_map(std::initializer_list >, std::size_t = boost::unordered::detail::default_bucket_count, Hash = Hash(), Pred = Pred(), Allocator = Allocator()) - ->unordered_map; + -> unordered_map, T, Hash, Pred, Allocator>; - template + template >, + class = boost::enable_if_t > > unordered_map(InputIterator, InputIterator, std::size_t, Allocator) - ->unordered_map, + -> unordered_map, boost::unordered::detail::iter_val_t, boost::hash >, std::equal_to >, Allocator>; - template + template >, + class = boost::enable_if_t > > unordered_map(InputIterator, InputIterator, Allocator) - ->unordered_map, + -> unordered_map, boost::unordered::detail::iter_val_t, boost::hash >, std::equal_to >, Allocator>; - template + template >, + class = boost::enable_if_t >, + class = boost::enable_if_t > > unordered_map(InputIterator, InputIterator, std::size_t, Hash, Allocator) - ->unordered_map, + -> unordered_map, boost::unordered::detail::iter_val_t, Hash, std::equal_to >, Allocator>; - template - unordered_map( - std::initializer_list >, std::size_t, Allocator) - ->unordered_map, std::equal_to, Allocator>; + template > > + unordered_map(std::initializer_list >, std::size_t, + Allocator) -> unordered_map, T, + boost::hash >, + std::equal_to >, Allocator>; - template - unordered_map(std::initializer_list >, Allocator) - ->unordered_map, std::equal_to, Allocator>; + template > > + unordered_map(std::initializer_list >, Allocator) + -> unordered_map, T, + boost::hash >, + std::equal_to >, Allocator>; - template - unordered_map(std::initializer_list >, std::size_t, - Hash, Allocator) - ->unordered_map, Allocator>; + template >, + class = boost::enable_if_t > > + unordered_map(std::initializer_list >, std::size_t, Hash, + Allocator) -> unordered_map, T, Hash, + std::equal_to >, Allocator>; #endif @@ -1007,9 +1030,9 @@ namespace boost { typedef K key_type; typedef T mapped_type; typedef std::pair value_type; - typedef H hasher; - typedef P key_equal; - typedef A allocator_type; + typedef typename boost::type_identity::type hasher; + typedef typename boost::type_identity

::type key_equal; + typedef typename boost::type_identity::type allocator_type; private: typedef boost::unordered::detail::map types; @@ -1612,62 +1635,82 @@ namespace boost { class Pred = std::equal_to >, class Allocator = std::allocator< - boost::unordered::detail::iter_to_alloc_t > > + boost::unordered::detail::iter_to_alloc_t >, + class = boost::enable_if_t >, + class = boost::enable_if_t >, + class = boost::enable_if_t >, + class = boost::enable_if_t > > unordered_multimap(InputIterator, InputIterator, std::size_t = boost::unordered::detail::default_bucket_count, Hash = Hash(), Pred = Pred(), Allocator = Allocator()) - ->unordered_multimap, + -> unordered_multimap, boost::unordered::detail::iter_val_t, Hash, Pred, Allocator>; - template , - class Pred = std::equal_to, - class Allocator = std::allocator > > - unordered_multimap(std::initializer_list >, + template >, + class Pred = std::equal_to >, + class Allocator = std::allocator >, + class = boost::enable_if_t >, + class = boost::enable_if_t >, + class = boost::enable_if_t > > + unordered_multimap(std::initializer_list >, std::size_t = boost::unordered::detail::default_bucket_count, Hash = Hash(), Pred = Pred(), Allocator = Allocator()) - ->unordered_multimap; + -> unordered_multimap, T, Hash, Pred, + Allocator>; - template + template >, + class = boost::enable_if_t > > unordered_multimap(InputIterator, InputIterator, std::size_t, Allocator) - ->unordered_multimap, + -> unordered_multimap, boost::unordered::detail::iter_val_t, boost::hash >, std::equal_to >, Allocator>; - template + template >, + class = boost::enable_if_t > > unordered_multimap(InputIterator, InputIterator, Allocator) - ->unordered_multimap, + -> unordered_multimap, boost::unordered::detail::iter_val_t, boost::hash >, std::equal_to >, Allocator>; - template + template >, + class = boost::enable_if_t >, + class = boost::enable_if_t > > unordered_multimap( InputIterator, InputIterator, std::size_t, Hash, Allocator) - ->unordered_multimap, + -> unordered_multimap, boost::unordered::detail::iter_val_t, Hash, std::equal_to >, Allocator>; - template - unordered_multimap( - std::initializer_list >, std::size_t, Allocator) - ->unordered_multimap, std::equal_to, - Allocator>; + template > > + unordered_multimap(std::initializer_list >, std::size_t, + Allocator) -> unordered_multimap, T, + boost::hash >, + std::equal_to >, Allocator>; - template - unordered_multimap( - std::initializer_list >, Allocator) - ->unordered_multimap, std::equal_to, - Allocator>; + template > > + unordered_multimap(std::initializer_list >, Allocator) + -> unordered_multimap, T, + boost::hash >, + std::equal_to >, Allocator>; - template - unordered_multimap(std::initializer_list >, - std::size_t, Hash, Allocator) - ->unordered_multimap, Allocator>; + template >, + class = boost::enable_if_t > > + unordered_multimap(std::initializer_list >, std::size_t, + Hash, Allocator) -> unordered_multimap, T, + Hash, std::equal_to >, Allocator>; #endif