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
}