Guo Xu | 19 Aug 15:56

compatibility between g++ and msvc8

#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&)'






_______________________________________________
Boost-users mailing list
Boost-users <at> lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
Frank Mori Hess | 19 Aug 16:30
Favicon

Re: compatibility between g++ and msvc8


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" ) );

Gmane