Question

I am trying to get the below code snippet to compile. But it fails with:

error C2665: 'boost::lambda::function_adaptor::apply' : none of the 8 overloads could convert all the argument types. Specifying the return type when calling bind does not help.

Any idea what I am doing wrong?

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <string>
#include <map>

int main()
{

    namespace bl = boost::lambda;
    typedef std::map<int, std::string> types;
    types keys_and_values;
    keys_and_values[ 0 ] = "zero";
    keys_and_values[ 1 ] = "one";
    keys_and_values[ 2 ] = "Two";

    std::for_each(
        keys_and_values.begin(),
        keys_and_values.end(),
        std::cout <<  bl::constant("Value empty?: ") << std::boolalpha <<  
                        bl::bind(&std::string::empty,
                                bl::bind(&types::value_type::second, _1)) << "\n");




    return 0;
}
Was it helpful?

Solution

minor changes to make it compile with g++ (time for better compiler :-) ?)

 1 #include <boost/lambda/lambda.hpp>
 2 #include <boost/lambda/bind.hpp>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <string>
 6 #include <map>
 7
 8 int main()
 9 {
10
11     namespace bl = boost::lambda;
12     typedef std::map<int, std::string> types;
13     types keys_and_values;
14     keys_and_values[ 0 ] = "zero";
15     keys_and_values[ 1 ] = "one";
16     keys_and_values[ 2 ] = "Two";
17
18     std::for_each(
19                   keys_and_values.begin(),
20                   keys_and_values.end(),
21                   std::cout <<  bl::constant("Value empty?: ") << std::boolalpha <<
22                   bl::bind(&std::string::empty,
23                            bl::bind(&types::value_type::second, bl::_1)) << "\n");
24
25
26
27
28     return 0;
29 }

notice missing includes and bl::_1

OTHER TIPS

#include <boost/foreach.hpp>
...
#define foreach BOOST_FOREACH
...
foreach(types::value_type kv, keys_and_values)
  std::cout <<  "Value empty?: " << std::boolalpha 
            <<  kv.second.empty() << "\n";
...
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top