Avertissement du compilateur (niveau 1) C4342
Mise à jour : novembre 2007
Message d'erreur
modification de comportement : 'fonction' appelé, mais un opérateur de membre a été appelé dans les versions précédentes
behavior change: 'function' called, but a member operator was called in previous versions
Dans les versions antérieures de Visual C++, un membre était appelé, mais ce comportement a été modifié et le compilateur recherche désormais la meilleure correspondance dans la portée de l'espace de noms.
Auparavant, si un opérateur membre était détecté, le compilateur ne tenait compte d'aucun opérateur de la portée de l'espace de noms. S'il existe une meilleure correspondance dans la portée de l'espace de noms, le compilateur actuel l'appelle correctement, alors que les compilateurs antérieurs ne la prenaient pas en compte.
Cet avertissement doit être désactivé lorsque vous avez porté votre code vers la version actuelle. Le compilateur peut fournir des faux positifs, en générant cet avertissement pour du code qui ne comprend aucun changement de comportement.
Cet avertissement est désactivé par défaut. Pour plus d'informations, consultez Compiler Warnings That Are Off by Default.
L'exemple suivant génère l'erreur 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;
}