Может ли компилятор автоматически генерировать std :: move для последнего использования lvalue?
Подобный код часто встречается в ссылочных статьях r-value:
Дэйв Абрамс: переместите его с помощью Rvalue
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
}
Может ли компилятор сгенерировать эту оптимизацию автоматически, то есть обнаружить, что l-значение все равно будет уничтожено и может быть удалено, или это будет нарушением стандарта, если предположить, что компилятор d вообще не знает ничего о как реализовано перемещение, копирование или уничтожение для класса X?
Если такая оптимизация разрешена, выполняется ли она каким-либо компилятором на практике?