Compartir vía


Advertencia del compilador (nivel 1) C4342

cambio de comportamiento: se llamó a "function", pero en versiones anteriores se llamaba a un operador de miembro

En versiones de Visual C++ anteriores a Visual Studio 2002, se llamaba a un miembro, pero este comportamiento se modificó y el compilador ahora encuentra la mejor coincidencia en el ámbito del espacio de nombres.

Si se encontró un operador miembro, el compilador no consideraría previamente ningún operador de ámbito del espacio de nombres. Si hay una mejor coincidencia en el ámbito del espacio de nombres, el compilador actual lo llama correctamente, mientras que los compiladores anteriores no lo considerarían.

Esta advertencia se debe deshabilitar después de migrar correctamente el código a la versión actual. El compilador puede dar falsos positivos, lo que genera esta advertencia para el código donde no hay ningún cambio de comportamiento.

De forma predeterminada, esta advertencia está desactivada. Para obtener más información, consulte Compiler Warnings That Are Off by Default.

El ejemplo siguiente genera la advertencia 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;
}