diff --git a/include/boost/unordered/unordered_flat_map.hpp b/include/boost/unordered/unordered_flat_map.hpp index 16312a9e..d7f4e6e7 100644 --- a/include/boost/unordered/unordered_flat_map.hpp +++ b/include/boost/unordered/unordered_flat_map.hpp @@ -483,6 +483,15 @@ namespace boost { return table_.try_emplace(std::move(key)).first->second; } + template + typename std::enable_if< + boost::unordered::detail::are_transparent::value, + mapped_type&>::type + operator[](K&& key) + { + return table_.try_emplace(std::forward(key)).first->second; + } + BOOST_FORCEINLINE size_type count(key_type const& key) const { auto pos = table_.find(key); diff --git a/include/boost/unordered/unordered_map.hpp b/include/boost/unordered/unordered_map.hpp index 6d81a3f8..315da4cc 100644 --- a/include/boost/unordered/unordered_map.hpp +++ b/include/boost/unordered/unordered_map.hpp @@ -973,6 +973,10 @@ namespace boost { mapped_type& operator[](const key_type&); mapped_type& operator[](BOOST_RV_REF(key_type)); + template + typename boost::enable_if_c::value, + mapped_type&>::type + operator[](BOOST_FWD_REF(Key) k); mapped_type& at(const key_type&); mapped_type const& at(const key_type&) const; @@ -2215,6 +2219,15 @@ namespace boost { return table_.try_emplace_unique(boost::move(k)).first->second; } + template + template + typename boost::enable_if_c::value, + typename unordered_map::mapped_type&>::type + unordered_map::operator[](BOOST_FWD_REF(Key) k) + { + return table_.try_emplace_unique(boost::forward(k)).first->second; + } + template typename unordered_map::mapped_type& unordered_map::at(const key_type& k)