コンパイラの警告 (レベル 1) C4350

動作変更: 'member1' が 'member2' の代わりに呼び出されました。

rvalue は非 const 参照にバインドできません。 以前のバージョンの Visual C++ では、直接的な初期化処理で rvalue を非 const 参照にバインドできました。 現在は警告が出されます。

下位互換性のために rvalue を非 const 参照にバインドすることもできますが、できるだけ標準変換を使用してください。

この警告は、Visual C++ .NET 2002 コンパイラから動作が変更されたことを表します。 この警告が有効な場合、警告が正しいコードに対して出されることがあります。 たとえば、std::auto_ptr クラス テンプレートを使用しているときに出されることがあります。

この警告が出された場合は、コードが非 const 参照への rvalue のバインドに関するものであるかどうかを調べてください。 const を参照に追加するか、追加の const 参照オーバーロードを指定すると、この問題を解決できます。

既定では、この警告はオフに設定されています。 詳細については、「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
}