Mal angenommen, ich habe folgende Definitionen:
Code: Alles auswählen
struct a
{
a() { std::cout << "cons" << std::endl; }
a(a const& o) { std::cout << "copy cons" << std::endl; }
a(a&& o) { std::cout << "move cons" << std::endl; }
};
a f(a b)
{
return b;
}
Code: Alles auswählen
auto b = a();
b = f(std::move(b));
Was ich im Wesentlich nicht verstehe ist, warum der Compiler nicht im Stande ist via RVO den zweiten Move wegzuoptimieren?cons
move cons
move cons
Ich verwende den GCC 4.6.2 nur mit -O3.