Может ли компилятор автоматически генерировать 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?

Если такая оптимизация разрешена, выполняется ли она каким-либо компилятором на практике?

Ответы на вопрос(3)

Ваш ответ на вопрос