コンパイラの警告 (レベル 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
}