J'essaie de compiler le code suivant sans succès (VC++6.0):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
struct UneClasse
{
	std::string s_name;
	bool s_wildchar;
	UneClasse():s_wildchar(false) {}
	UneClasse(const std::string & name,bool wildchar):s_name(name),s_wildchar(wildchar) {}
	UneClasse(const UneClasse & r):s_name(r.s_name),s_wildchar(r.s_wildchar) {}
	UneClasse & operator=(const UneClasse & r)
		{ s_name=r.s_name;s_wildchar=r.s_wildchar;return *this; }
	bool IsMatching(const std::string & name)
	{
		if (s_wildchar)
			return ::strnicmp(s_name.c_str(),name.c_str(),s_name.length())==0;
		else
			return ::stricmp(s_name.c_str(),name.c_str())==0;
	}
};
 
struct UneClassePred
{
	std::string s_name;
	UneClassePred(std::string name):s_name(name) {}
	bool operator()(const UneClasse & r)
	{
		if (r.s_wildchar)
			return ::strnicmp(s_name.c_str(),r.s_name.c_str(),r.s_name.length())==0;
		else
			return ::stricmp(s_name.c_str(),r.s_name.c_str())==0;
	}
};
 
 
int main(int argc, char* argv[])
{
	std::vector<UneClasse> v;
	v.push_back(UneClasse("premier",false));
	v.push_back(UneClasse("t",true));
	v.push_back(UneClasse("second",false));
	v.push_back(UneClasse("i",true));
 
	std::vector<UneClasse>::iterator it1=std::find_if(v.begin(),v.end(),UneClassePred(std::string("troisième")));
 
	std::vector<UneClasse>::iterator it2=std::find_if(v.begin(),v.end(),
		std::bind2nd(std::mem_fun_ref<UneClasse,std::string>(&UneClasse::IsMatching),std::string("indefini")) // <- erreur compil VC++6.0
		);
	return 0;
}
Si quelqu'un a une idée pour m'indiquer où je fais une erreur.
Pour info, le premier appel à find_if() fonctionne très bien en passant par la classe intermédiaire UneClassePred. Mais justement j'aimerais éviter cela.
Merci.