Avertissement du compilateur (niveau 1) C4350
changement de comportement : 'membre1' appelé à la place de 'membre2'
Une rvalue ne peut pas être liée à une référence non const.Dans les versions antérieures de Visual C++, il était possible de lier une rvalue à une référence non const dans une initialisation directe.Ce code génère désormais un avertissement.
À des fins de compatibilité descendante, il est encore possible de lier des rvalues à des références non const, mais les conversions standard sont conseillées dans la mesure du possible.
Cet avertissement représente une modification du comportement par rapport au compilateur de Visual C++ .NET 2002.S'il est activé, cet avertissement peut être généré pour un code correct.Par exemple, il peut s'afficher lors de l'utilisation du modèle de classe std::auto_ptr.
Si vous rencontrez cet avertissement, examinez votre code pour déterminer s'il dépend de la liaison de rvalue à des références non const.Le problème peut être résolu en ajoutant une constante à la référence ou en fournissant une surcharge de référence const supplémentaire.
Cet avertissement est désactivé par défaut.Pour plus d'informations, consultez Avertissements du compilateur désactivés par défaut.
L'exemple suivant génère l'erreur 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
}