The C++11 std::map<K,V> type has an emplace function, as do many other containers.
std::map<int,std::string> m; std::string val {"hello"}; m.emplace(1, val); This code works as advertised, emplacing the std::pair<K,V> directly, however it results in a copy of key and val taking place.
Is it possible to emplace the value type directly into the map as well? Can we do better than moving the arguments in the call to emplace?
Here's a more thorough example:
struct Foo { Foo(double d, string s) {} Foo(const Foo&) = delete; Foo(Foo&&) = delete; } map<int,Foo> m; m.emplace(1, 2.3, string("hello")); // invalid
valis an lvalue, so a copy will have to be made at some point.emplacefunction so that it is instantiated using perfect forwarding and (presumably) placement new within the map.