컴파일러 경고(수준 1) C4342

동작 변경: 'function'이 호출되었지만 이전 버전에서 멤버 연산자가 호출되었습니다.

Visual Studio 2002 이전의 Visual C++ 버전에서는 멤버가 호출되었지만 이 동작이 변경되었으며 컴파일러가 이제 네임스페이스 범위에서 가장 일치하는 항목을 찾습니다.

멤버 연산자를 찾은 경우 컴파일러는 이전에 네임스페이스 범위 연산자를 고려하지 않았습니다. 네임스페이스 범위에서 더 나은 일치 항목이 있는 경우 현재 컴파일러는 이를 올바르게 호출하지만 이전 컴파일러는 이를 고려하지 않습니다.

코드를 현재 버전으로 성공적으로 이식한 후에는 이 경고를 사용하지 않도록 설정해야 합니다. 컴파일러는 가양성(false positive)을 제공하여 동작 변경이 없는 코드에 대해 이 경고를 생성할 수 있습니다.

기본적으로 이 경고는 해제되어 있습니다. 자세한 내용은 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;
}