
In this code (fabricated) sequence, ages_by_bind compiles, but ages_by_lambda does not. I believe this is because the lambda version does not publish result_type to its resultant functors, since the increased generality of lambda makes this difficult or impossible to do. Is there any way I can get round this, as it currently makes the lambda/transformed combination completely unusable AFAICS. Thx, - Rob. #include <map> #include <vector> #include <string> #include <boost/bind.hpp> #include <boost/range.hpp> #include <boost/range/adaptor/transformed.hpp> #include <boost/range/algorithm_ext/push_back.hpp> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> std::vector<int> ages_by_bind( const std::map<std::string, int> & people ) { using boost::adaptors::transformed; std::vector<int> result; boost::range::push_back( result, people | transformed( bind( & std::map<std::string, int>::value_type::second, _1 ) ) ); return result; } std::vector<int> ages_by_lambda( const std::map<std::string, int> & people ) { using boost::adaptors::transformed; namespace ll = boost::lambda; std::vector<int> result; boost::range::push_back( result, people | transformed( ll::bind( & std::map<std::string, int>::value_type::second, ll::_1 ) ) ); return result; }