Предупреждение компилятора (уровень 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;
}