Advertencia del compilador (nivel 1) C4342
cambio en el comportamiento: se llamó a 'función', pero en versiones anteriores se llamaba a un operador de miembro
En versiones anteriores de Visual C++, se llamaba a un miembro, pero este comportamiento se ha modificado y el compilador busca la mejor coincidencia en el ámbito de espacio de nombres.
Si se encontrara un operador de miembro, el compilador no consideraría previamente ningún operador del ámbito de espacio de nombres. Si hay una mejor coincidencia en el ámbito de espacio de nombres, el compilador actual lo llamará correctamente, mientras que los compiladores anteriores no lo considerarían.
Esta advertencia se debería deshabilitar después de haberse trasladado correctamente el código a la versión actual. El compilador puede proporcionar falsos positivos, generando esta advertencia para código en el que no hay ningún cambio de comportamiento.
De forma predeterminada, esta advertencia está desactivada. Para obtener más información, vea Advertencias del compilador desactivadas de forma predeterminada.
El código siguiente genera el error 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;
}