diff --git a/include/boost/container/flat_map.hpp b/include/boost/container/flat_map.hpp index 191f3b9..e11522a 100644 --- a/include/boost/container/flat_map.hpp +++ b/include/boost/container/flat_map.hpp @@ -1570,12 +1570,32 @@ flat_map(InputIterator, InputIterator) -> flat_map< typename dtl::remove_const< typename iterator_traits::value_type::first_type>::type , typename iterator_traits::value_type::second_type>; +#ifdef BOOST_HAS_CTAD_SFINAE + +namespace dtl { + + template + using enable_if_allocator_t = std::enable_if_t().allocate(0)), U *>, T>; + + template + using enable_if_compare_t = std::enable_if_t()(std::declval(), std::declval())), bool>, T>; + +} // namespace dtl + template flat_map(InputIterator, InputIterator, Allocator const&) -> flat_map< typename dtl::remove_const< typename iterator_traits::value_type::first_type>::type , typename iterator_traits::value_type::second_type , std::less::value_type::first_type>::type> - , Allocator>; + , dtl::enable_if_allocator_t::value_type>>>; + +template +flat_map(InputIterator, InputIterator, Compare const&) -> + flat_map< typename dtl::remove_const::value_type::first_type>::type + , typename iterator_traits::value_type::second_type + , dtl::enable_if_compare_t::value_type::first_type>>>; + +#else template flat_map(InputIterator, InputIterator, Compare const&) -> @@ -1583,6 +1603,8 @@ flat_map(InputIterator, InputIterator, Compare const&) -> , typename iterator_traits::value_type::second_type , Compare>; +#endif + template flat_map(InputIterator, InputIterator, Compare const&, Allocator const&) -> flat_map< typename dtl::remove_const::value_type::first_type>::type @@ -1595,12 +1617,22 @@ flat_map(ordered_unique_range_t, InputIterator, InputIterator) -> flat_map< typename dtl::remove_const::value_type::first_type>::type , typename iterator_traits::value_type::second_type>; +#ifdef BOOST_HAS_CTAD_SFINAE + template flat_map(ordered_unique_range_t, InputIterator, InputIterator, Allocator const&) -> flat_map< typename dtl::remove_const::value_type::first_type>::type , typename iterator_traits::value_type::second_type , std::less::value_type::first_type>::type> - , Allocator>; + , dtl::enable_if_allocator_t::value_type>>>; + +template +flat_map(ordered_unique_range_t, InputIterator, InputIterator, Compare const&) -> + flat_map< typename dtl::remove_const::value_type::first_type>::type + , typename iterator_traits::value_type::second_type + , dtl::enable_if_compare_t::value_type::first_type>>>; + +#else template flat_map(ordered_unique_range_t, InputIterator, InputIterator, Compare const&) -> @@ -1608,6 +1640,8 @@ flat_map(ordered_unique_range_t, InputIterator, InputIterator, Compare const&) - , typename iterator_traits::value_type::second_type , Compare>; +#endif + template flat_map(ordered_unique_range_t, InputIterator, InputIterator, Compare const&, Allocator const&) -> flat_map< typename dtl::remove_const::value_type::first_type>::type @@ -2853,12 +2887,22 @@ flat_multimap(InputIterator, InputIterator) -> flat_multimap::value_type::first_type>::type , typename iterator_traits::value_type::second_type>; +#ifdef BOOST_HAS_CTAD_SFINAE + template flat_multimap(InputIterator, InputIterator, Allocator const&) -> flat_multimap::value_type::first_type>::type , typename iterator_traits::value_type::second_type , std::less::value_type::first_type>::type> - , Allocator>; + , dtl::enable_if_allocator_t::value_type>>>; + +template +flat_multimap(InputIterator, InputIterator, Compare const&) -> + flat_multimap< typename dtl::remove_const::value_type::first_type>::type + , typename iterator_traits::value_type::second_type + , dtl::enable_if_compare_t::value_type::first_type>>>; + +#else template flat_multimap(InputIterator, InputIterator, Compare const&) -> @@ -2866,6 +2910,8 @@ flat_multimap(InputIterator, InputIterator, Compare const&) -> , typename iterator_traits::value_type::second_type , Compare>; +#endif + template flat_multimap(InputIterator, InputIterator, Compare const&, Allocator const&) -> flat_multimap< typename dtl::remove_const::value_type::first_type>::type @@ -2878,12 +2924,22 @@ flat_multimap(ordered_range_t, InputIterator, InputIterator) -> flat_multimap< typename dtl::remove_const::value_type::first_type>::type , typename iterator_traits::value_type::second_type>; +#ifdef BOOST_HAS_CTAD_SFINAE + template flat_multimap(ordered_range_t, InputIterator, InputIterator, Allocator const&) -> flat_multimap< typename dtl::remove_const::value_type::first_type>::type , typename iterator_traits::value_type::second_type , std::less::value_type::first_type>::type> - , Allocator>; + , dtl::enable_if_allocator_t::value_type>>>; + +template +flat_multimap(ordered_range_t, InputIterator, InputIterator, Compare const&) -> + flat_multimap< typename dtl::remove_const::value_type::first_type>::type + , typename iterator_traits::value_type::second_type + , dtl::enable_if_compare_t::value_type::first_type>>>; + +#else template flat_multimap(ordered_range_t, InputIterator, InputIterator, Compare const&) -> @@ -2891,6 +2947,9 @@ flat_multimap(ordered_range_t, InputIterator, InputIterator, Compare const&) -> , typename iterator_traits::value_type::second_type , Compare>; +#endif + + template flat_multimap(ordered_range_t, InputIterator, InputIterator, Compare const&, Allocator const&) -> flat_multimap< typename dtl::remove_const::value_type::first_type>::type