コンパイラの警告 (レベル 1) C4350
動作変更: 'member1' が 'member2' の代わりに呼び出されました
rvalue を非定数参照にバインドすることはできません。 Visual Studio 2003 より前のバージョンの Visual C++ では、直接の初期化で rvalue を非定数参照にバインドすることが可能でした。 このコードでは、警告が返されるようになりました。
下位互換性のために、rvalue を非定数参照にバインドすることは可能ですが、可能な限り標準変換をお勧めします。
この警告は、Visual C++ .NET 2002 コンパイラからの動作の変更を表します。 有効にすると、正しいコードに対してこの警告が示される可能性があります。 たとえば、std::auto_ptr クラス テンプレートを使用するときに指定できます。
この警告が表示された場合は、コードを調べて、rvalue を非 const 参照へのバインドに依存しているかどうかを確認してください。 参照に const を追加するか、const-reference のオーバーロードを追加すると、問題が解決する場合があります。
既定では、この警告はオフに設定されています。 詳細については、「 Compiler Warnings That Are Off by Default」を参照してください。
次の例では 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
}