O compilador pode gerar std :: move para um último uso de lvalue automaticamente?
Um código como este é frequentemente visto em artigos de referências de valor r:
Dave Abrams: mova-o com referências de valor
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
}
Poderia um compilador gerar essa otimização automaticamente, isto é, detectar um valor l será destruído de qualquer maneira e poderia ser movido de, ou isso seria uma violação do padrão, assumindo um caso genérico que o compilador não sabe sobre como é mover, copiar ou destruir implementado para a classe X?
Se tal otimização é permitida, ela é executada por algum compilador na prática?