Поделиться через


Предупреждение компилятора (уровень 1) C4342

изменение поведения: "function" вызывается, но оператор-член был вызван в предыдущих версиях

В версиях Visual C++ до Visual Studio 2002 вызывается элемент, но это поведение было изменено, и компилятор теперь находит лучшее совпадение в области пространства имен.

Если был найден оператор-член, компилятор ранее не будет рассматривать операторы области имен. Если в области пространства имен лучше совпадение, текущий компилятор правильно вызывает его, в то время как предыдущие компиляторы не считают его.

Это предупреждение должно быть отключено после успешного переноса кода в текущую версию. Компилятор может дать ложные срабатывания, создав это предупреждение для кода, в котором нет изменений в поведении.

Это предупреждение отключено по умолчанию. Дополнительные сведения см. в разделе 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;
}