
#include <iostream> #include <vector> #include <boost/functional.hpp> #include <boost/algorithm/string.hpp> using namespace std; using namespace boost; int main() { vector<string> strs; strs.push_back( "Beijing" ); strs.push_back( "Olympic" ); strs.push_back( "Game" ); vector<string>::iterator it = std::find_if( strs.begin(), strs.end(), boost::bind2nd( boost::contains<string, string> , "mp" ) ); return 0; } why this part of programe can be compiled on the mscv8, but can not be compled on the g++? the error prompt is: stringalgo.cpp: In function 'int main()': stringalgo.cpp:29: error: no matching function for call to 'bind2nd(<unresolved overloaded function type>, std::string&)'

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Tuesday 19 August 2008 09:56 am, Guo Xu wrote:
vector<string>::iterator it = std::find_if( strs.begin(), strs.end(), boost::bind2nd( boost::contains<string, string> , "mp" ) );
return 0; }
why this part of programe can be compiled on the mscv8, but can not be compled on the g++?
the error prompt is: stringalgo.cpp: In function 'int main()': stringalgo.cpp:29: error: no matching function for call to 'bind2nd(<unresolved overloaded function type>, std::string&)'
Its having trouble deciding between the 2 and 3 template argument overloads of boost::contains. You can resolve it by explicitly decaring a function pointer: bool (*contains_p)(const std::string &, const std::string &) = &boost::contains<string, string>; boost::bind2nd( contains_p , "mp" ) ); -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFIqtkf5vihyNWuA4URAtu8AKCnZoeQtudcSz2tPELSQrJfFQ57swCgu6Nb k+D/wjHf+fejIrK1pOEZDjg= =W4uU -----END PGP SIGNATURE-----
participants (2)
-
Frank Mori Hess
-
Guo Xu