diff --git a/include/boost/container/detail/advanced_insert_int.hpp b/include/boost/container/detail/advanced_insert_int.hpp index 1296659..45bc311 100644 --- a/include/boost/container/detail/advanced_insert_int.hpp +++ b/include/boost/container/detail/advanced_insert_int.hpp @@ -23,6 +23,7 @@ #include #include #include +#include #include //std::iterator_traits #include #include @@ -280,6 +281,20 @@ struct insert_emplace_proxy +struct insert_emplace_proxy::value_type>::type + > + : public insert_copy_proxy +{ + explicit insert_emplace_proxy(const typename boost::container::allocator_traits::value_type &v) + : insert_copy_proxy(v) + {} +}; + template struct insert_emplace_proxy::value_type &> : public insert_copy_proxy @@ -290,7 +305,9 @@ struct insert_emplace_proxy -struct insert_emplace_proxy::value_type &> +struct insert_emplace_proxy::value_type>::type & + > : public insert_copy_proxy { explicit insert_emplace_proxy(const typename boost::container::allocator_traits::value_type &v) @@ -298,16 +315,6 @@ struct insert_emplace_proxy -struct insert_emplace_proxy::value_type> - : public insert_copy_proxy -{ - explicit insert_emplace_proxy(const typename boost::container::allocator_traits::value_type &v) - : insert_copy_proxy(v) - {} -}; - - }}} //namespace boost { namespace container { namespace container_detail { #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING @@ -419,6 +426,20 @@ struct insert_emplace_proxy_arg1 +struct insert_emplace_proxy_arg1::value_type>::type + > + : public insert_copy_proxy +{ + explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits::value_type &v) + : insert_copy_proxy(v) + {} +}; + template struct insert_emplace_proxy_arg1::value_type &> : public insert_copy_proxy @@ -429,16 +450,9 @@ struct insert_emplace_proxy_arg1 -struct insert_emplace_proxy_arg1::value_type &> - : public insert_copy_proxy -{ - explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits::value_type &v) - : insert_copy_proxy(v) - {} -}; - -template -struct insert_emplace_proxy_arg1::value_type> +struct insert_emplace_proxy_arg1::value_type>::type & + > : public insert_copy_proxy { explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits::value_type &v) diff --git a/include/boost/container/detail/type_traits.hpp b/include/boost/container/detail/type_traits.hpp index 6f20bd5..50e3b88 100644 --- a/include/boost/container/detail/type_traits.hpp +++ b/include/boost/container/detail/type_traits.hpp @@ -165,6 +165,10 @@ template struct add_const_reference { typedef T& type; }; +template +struct add_const +{ typedef const T type; }; + template struct is_same {