Avviso del compilatore (livello 1) C4350
modifica del comportamento: viene chiamato 'membro1' anziché 'membro2'
Un rvalue non può essere associato a un riferimento non const. Nelle versioni di Visual C++ precedenti a Visual Studio 2003, è stato possibile associare un rvalue a un riferimento non const in un'inizializzazione diretta. Questo codice restituisce ora un avviso.
Per garantire la compatibilità con le versioni precedenti, è comunque possibile associare rvalue a riferimenti non const, ma le conversioni standard sono preferibili laddove possibile.
Questo avviso rappresenta una modifica del comportamento dal compilatore .NET 2002 di Visual C++. Se abilitata, è possibile che venga fornito questo avviso per il codice corretto. Ad esempio, può essere specificato quando si usa il modello di classe std::auto_ptr .
Se viene visualizzato questo avviso, esaminare il codice per verificare se dipende dall'associazione di rvalue ai riferimenti non const. L'aggiunta di un oggetto const al riferimento o la fornitura di un overload const-reference aggiuntivo può risolvere il problema.
Per impostazione predefinita, questo avviso non è attivo. Per altre informazioni, vedere Compiler Warnings That Are Off by Default.
L'esempio seguente genera l'errore 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
}