Aviso do compilador (nível 1) C4342
alteração de comportamento: a função “” chamou, mas um operador de membro foi chamado em versões anteriores
Em versões anteriores do Visual C++, um membro foi chamado, mas esse comportamento foi alterado e o compilador encontrará a melhor correspondência no escopo do namespace.
Se um operador de membro foi localizado, o compilador anteriormente não consideraria operadores do escopo do namespace. Se houver uma melhor correspondência no escopo do namespace, o compilador atual chamar-o-&z corretamente, enquanto os compiladores anteriores não o consideraria.
Esse aviso deve ser desabilitado depois de mover com êxito seu código para a versão atual. O compilador pode fornecer aos falsos positivos, gerando este aviso para o código em que não há nenhuma alteração de comportamento.
Esse aviso é desativada por padrão. Para obter mais informações, consulte Avisos de compilador desativados por padrão.
O seguinte exemplo gera 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;
}