Czy kompilator może automatycznie wygenerować std :: move dla ostatniego użycia wartości l?
Kod taki jak ten jest często widoczny w artykułach o wartościach r:
Dave Abrams: Move It With Rvalue References
void g(X);
void f()
{
X b;
g(b); // still need the value of b
…
g( std::move(b) ); // all done with b now; grant permission to move
}
Czy kompilator może automatycznie wygenerować tę optymalizację, tj. Wykrycie wartości l i tak zostanie zniszczone i może zostać przeniesione z, lub byłoby to naruszeniem standardu, przy założeniu, że kompilator nie wie nic o tym, jak to jest przenieść, skopiować lub zniszczyć zaimplementowane dla klasy X?
Jeśli taka optymalizacja jest dozwolona, czy jest wykonywana przez jakiegoś kompilatora w praktyce?