Que otimização a semântica de movimento fornece se já temos o RVO?

Pelo que entendi, um dos propósitos de adicionar semântica de movimentação é otimizar o código chamando o construtor especial para copiar objetos "temporários". Por exemplo, emesta resposta, vemos que ele pode ser usado para otimizarstring a = x + y coisa. Como x + y é uma expressão de rvalue, em vez de copiar em profundidade, podemos copiar apenas o ponteiro da string e o tamanho da string. Mas, como sabemos, os compiladores modernos suportamotimização do valor de retorno, portanto, sem usar a semântica de movimentação, nosso código não chamará o construtor de cópias.

Para provar isso, escrevo este código:

#include <iostream>

struct stuff
{
        int x;
        stuff(int x_):x(x_){}
        stuff(const stuff & g):x(g.x)
        {
                std::cout<<"copy"<<std::endl;
        }
};   
stuff operator+(const stuff& lhs,const stuff& rhs)
{
        stuff g(lhs.x+rhs.x);
        return g;
}
int main()
{
        stuff a(5),b(7);
        stuff c = a+b;
}

E depois de executá-lo no VC ++ 2010 e g ++ no modo de otimização, estou recebendo saída vazia.

Que tipo de otimização é essa, se sem ela meu código ainda funciona mais rápido? Você poderia explicar o que estou entendendo errado?

questionAnswers(8)

yourAnswerToTheQuestion