Aviso do compilador (nível 1) C4350

alteração de comportamento: 'member1' chamado no lugar de 'member2'

Um rvalue não pode ser associado a uma referência não const. Em versões do Visual C++ antes do Visual Studio 2003, era possível associar um rvalue a uma referência não const em uma inicialização direta. Este código agora gera um aviso.

Para compatibilidade com versões anteriores, ainda é possível associar rvalues a referências não const, mas as conversões padrão são preferíveis sempre que possível.

Esse aviso representa uma alteração de comportamento do compilador .NET 2002 do Visual C++. Se habilitado, esse aviso poderia ser dado para código correto. Por exemplo, ele poderia ser dado ao usar o modelo de classe std::auto_ptr.

Se você receber esse aviso, examine seu código para ver se ele depende da associação de rvalues a referências não const. Adicionar um const à referência ou fornecer uma sobrecarga de referência const adicional pode resolver o problema.

Esse aviso está desativado por padrão. Para obter mais informações, confira Avisos do compilador desativados por padrão.

O exemplo a seguir gera o erro C4350:

// C4350.cpp
// compile with: /W1
#pragma warning (default : 4350)
class A {};

class B
{
public:
   B(B&){}
   // try the following instead:
   // B(const B&){}

   B(A){}
   operator A(){ return A();}
};

B source() { return A(); }

int main()
{
   B ap(source());   // C4350
}