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?

questionAnswers(3)

yourAnswerToTheQuestion