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

更新 : 2007 年 11 月

エラー メッセージ

動作変更: '関数' が呼び出されましたが、メンバ演算子が前のバージョンで呼び出されました

以前のバージョンの Visual C++ ではメンバが呼び出されていましたが、この動作が変更されました。コンパイラは最も適合する演算子を名前空間スコープから検索します。

メンバ演算子が見つかった場合、以前のコンパイラは名前空間スコープの演算子を検索しませんでした。より適合する演算子が名前空間スコープにある場合、以前のコンパイラはそれを検索しませんでしたが、現在のコンパイラは正しく呼び出します。

この警告は、コードを現在のバージョンに正しく移植した後で無効にする必要があります。コンパイラは偽陽性を指定し、動作が変更されていないコードに対してこの警告を生成する場合があります。

既定では、この警告はオフに設定されています。詳細については、「Compiler Warnings That Are Off by Default」を参照してください。

次の例では C4342 警告が生成されます。

// C4342.cpp
// compile with: /EHsc /W1
#include <fstream>
#pragma warning(default: 4342)
using namespace std;
struct X : public ofstream {
   X();
};

X::X() {
   open( "ofs_bug_ev.txt." );
   if ( is_open() ) {
      *this << "Text" << "<-should be text" << endl;   // C4342
      *this << ' ' << "<-should be space symbol" << endl;   // C4342
   }
}

int main() {
   X b;
   b << "Text" << "<-should be text" << endl;
   b << ' ' << "<-should be space symbol" << endl;
}