Advertencia del compilador (nivel 1) C4350
cambio de comportamiento: se llamó a 'miembro1' en lugar de a 'miembro2'
Un valor R no se puede enlazar a una referencia que no es const. En versiones anteriores de Visual C++, se podía enlazar un valor R a una referencia no const en una inicialización directa. Ahora, este código da una advertencia.
Para compatibilidad con versiones anteriores, todavía es posible enlazar valores R a referencias no const, pero son preferibles las conversiones estándar siempre que sea posible.
Esta advertencia representa un cambio de comportamiento del compilador de Visual C++ .NET 2002. Si está habilitada, puede haberse dado para código correcto. Por ejemplo, podría darse al utilizar la plantilla de clase std::auto_ptr.
Si aparece esta advertencia, examine su código para ver si depende del enlace de valores R a referencias no const. El problema se podría resolver agregando una constante a la referencia o proporcionando una sobrecarga de referencia const adicional.
De forma predeterminada, esta advertencia está desactivada. Para obtener más información, vea Advertencias del compilador desactivadas de forma predeterminada.
El código siguiente genera el error 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
}