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