std :: mapa emplace sin copiar valor

El C ++ 11std::map<K,V>&nbsp;tipo tiene unemplace&nbsp;función, al igual que muchos otros contenedores.

std::map<int,std::string> m;

std::string val {"hello"};

m.emplace(1, val);

Este código funciona como se anuncia, ubicando elstd::pair<K,V>&nbsp;directamente, sin embargo resulta en una copia dekey&nbsp;yval&nbsp;teniendo lugar.

¿Es posible colocar el tipo de valor directamente en el mapa también? ¿Podemos hacerlo mejor que mover los argumentos en la llamada aemplace?

Aquí hay un ejemplo más completo:

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