diff --git a/include/boost/unordered/detail/type_traits.hpp b/include/boost/unordered/detail/type_traits.hpp index 4369df2e..f99f7f42 100644 --- a/include/boost/unordered/detail/type_traits.hpp +++ b/include/boost/unordered/detail/type_traits.hpp @@ -219,6 +219,17 @@ namespace boost { using iter_to_alloc_t = typename std::pair const, iter_val_t >; #endif + +#if BOOST_CXX_VERSION < 201703L + template + constexpr typename std::add_const::type& as_const(T& t) noexcept + { + return t; + } + template void as_const(const T&&) = delete; +#else + using std::as_const; +#endif } // namespace detail } // namespace unordered } // namespace boost diff --git a/include/boost/unordered/unordered_map.hpp b/include/boost/unordered/unordered_map.hpp index 47986d4d..6b7418b0 100644 --- a/include/boost/unordered/unordered_map.hpp +++ b/include/boost/unordered/unordered_map.hpp @@ -198,7 +198,7 @@ namespace boost { template std::pair emplace(Args&&... args) { return table_.emplace_unique( - table::extractor::extract(std::forward(args)...), + table::extractor::extract(detail::as_const(args)...), std::forward(args)...); } @@ -206,7 +206,7 @@ namespace boost { iterator emplace_hint(const_iterator hint, Args&&... args) { return table_.emplace_hint_unique(hint, - table::extractor::extract(std::forward(args)...), + table::extractor::extract(detail::as_const(args)...), std::forward(args)...); } diff --git a/include/boost/unordered/unordered_set.hpp b/include/boost/unordered/unordered_set.hpp index d891a418..eae846dd 100644 --- a/include/boost/unordered/unordered_set.hpp +++ b/include/boost/unordered/unordered_set.hpp @@ -194,7 +194,7 @@ namespace boost { template std::pair emplace(Args&&... args) { return table_.emplace_unique( - table::extractor::extract(std::forward(args)...), + table::extractor::extract(detail::as_const(args)...), std::forward(args)...); } @@ -202,7 +202,7 @@ namespace boost { iterator emplace_hint(const_iterator hint, Args&&... args) { return table_.emplace_hint_unique(hint, - table::extractor::extract(std::forward(args)...), + table::extractor::extract(detail::as_const(args)...), std::forward(args)...); }