Howto bind with string_algo predicates on gcc?
Hello everyone I ran into an issue I cannot explain, when using bind with the string algorithms. The following code fragment works as expected with MSVC 8.0: #include <boost/algorithm/string/predicate.hpp> #include <boost/bind.hpp> #include <iostream> #include <vector> #include <string> using namespace std; using namespace boost; using namespace boost::algorithm; int main() { typedef vector<string> string_container; string_container numbers; numbers.push_back("one"); numbers.push_back("two"); numbers.push_back("three"); string_container::const_iterator s = find_if(numbers.begin(), numbers.end(), bind(&contains<string, string>, _1, "w")); if (s != numbers.end()) { cout << "Found: " << *s << endl; } return 0; } Trying to compile the same code with gcc 3.4.5 gives the error: test.cpp:18: error: no matching function for call to `bind(<unknown type>, boost::arg<1> (&)(), const char[2])' Does anyone has an idea how to let bind know the "type" of the predicate "contains"? Regards Jean-Pierre Bergamin
AMDG Jean-Pierre Bergamin wrote:
Trying to compile the same code with gcc 3.4.5 gives the error: test.cpp:18: error: no matching function for call to `bind(<unknown type>, boost::arg<1> (&)(), const char[2])'
Does anyone has an idea how to let bind know the "type" of the predicate "contains"?
typedef bool (*contains_type)(const string&, const string&); string_container::const_iterator s = find_if(numbers.begin(), numbers.end(), bind((contains_type)&contains<string, string>, _1, "w")); Or better, use a function object: struct contains { typedef bool result_type; bool operator()(const string& arg1, const string& arg2) { return(boost::algorithm::contains(arg1, arg2)); } }; In Christ, Steven Watanabe
participants (2)
-
Jean-Pierre Bergamin
-
Steven Watanabe