Avatar ·

Para que serve std::forward e quais problemas ele resolve em C++?

Estou estudando C++11 e me deparei com std::forward. Li a documentação, mas não entendo completamente para que ele serve. Tenho uma função template que recebe um argumento por referência universal (T&&) e o passa para outra função:\n\n```cpp\ntemplate\nvoid wrapper(T&& arg) {\n target(arg); // apenas passando\n}\n```\n\nMas quando passo um rvalue (por exemplo, um objeto temporário), target o recebe como lvalue, porque arg tem um nome. Por causa disso, ocorre cópia em vez de movimento. Ouvi dizer que std::forward resolve esse problema, mas não entendo como. Você pode explicar com exemplos: quais problemas exatamente std::forward resolve e como usá-lo corretamente? De preferência com código para que a diferença seja visualmente clara. Obrigado!\n<<>>\n

O que é std::forward e para que serve