[boost lambda bind] overloading not compiling

Hi All, I came across this strange error. Binding of overloaded member functions works with boost bind, but not with boost lambda bind. Here is the example Following builds and works fine #include "boost/function.hpp" #include "boost/bind.hpp" class Operations { public: void Fun1( int i ){ std::cout<<"\nfunction with one arg\n"; } void Fun1( int i, double d) {std::cout<<"\nfunction with two args\n"; } }; ----------------------- int main() { Operations op; typedef boost::function <void () > fptr; fptr func1 = boost::bind( &Operations::Fun1, &op,1); fptr func2 = boost::bind( &Operations::Fun1, &op, 1, 2.2 ); return 0; } ------------------------ While following Does not compile int main() { using namespace boost::lambda; Operations op; typedef boost::function <void () > fptr; fptr func1 = bind( &Operations::Fun1, &op,1); fptr func2 = bind( &Operations::Fun1, &op, 1, 2.2 ); return 0 } ------------------------- This spits out massive error, as shown below. I think gist of which is it can't figure out which function to instantiate, when using lambda bind. Can some body please point out what am I missing here ? (Sorry for long email, I didn't wanted to clutter the email with this error message, bu thought most of you will figure it out just from looking at it.). Any help will be appreciated, and thanks in advance. Kaz boostFunctionAndBind.cpp: In function ‘int main()’: boostFunctionAndBind.cpp:61:45: error: no matching function for call to ‘bind(<unresolved overloaded function type>, Operations*, int)’ boostFunctionAndBind.cpp:61:45: note: candidates are: /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:49:1: note: template<class Result> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1, boost::lambda::function_action<1, T> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)()>::type> > boost::lambda::bind(Result (&)()) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:71:1: note: template<class Arg1> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1, boost::lambda::function_action<1> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1>::type> > boost::lambda::bind(const Arg1&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:91:1: note: template<class Result, class Arg1> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1, boost::lambda::function_action<1, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1>::type> > boost::lambda::bind(const Arg1&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:190:1: note: template<class Result, class Par1, class Arg2> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1), const Arg2>::type> > boost::lambda::bind(Result (&)(Par1), const Arg2&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:212:1: note: template<class Arg1, class Arg2> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2>::type> > boost::lambda::bind(const Arg1&, const Arg2&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:232:1: note: template<class Result, class Arg1, class Arg2> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2>::type> > boost::lambda::bind(const Arg1&, const Arg2&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:333:1: note: template<class Result, class Par1, class Par2, class Arg2, class Arg3> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3, boost::lambda::function_action<3, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2), const Arg2, const Arg3>::type> > boost::lambda::bind(Result (&)(Par1, Par2), const Arg2&, const Arg3&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:361:1: note: template<class Arg1, class Arg2, class Arg3> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3, boost::lambda::function_action<3> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:387:1: note: template<class Result, class Arg1, class Arg2, class Arg3> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3, boost::lambda::function_action<3, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:503:1: note: template<class Result, class Par1, class Par2, class Par3, class Arg2, class Arg3, class Arg4> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<4, boost::lambda::function_action<4, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3), const Arg2&, const Arg3&, const Arg4&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:532:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<4, boost::lambda::function_action<4> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:558:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<4, boost::lambda::function_action<4, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:679:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Arg2, class Arg3, class Arg4, class Arg5> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<5, boost::lambda::function_action<5, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4, const Arg5>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4), const Arg2&, const Arg3&, const Arg4&, const Arg5&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:710:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<5, boost::lambda::function_action<5> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:738:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<5, boost::lambda::function_action<5, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:867:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<6, boost::lambda::function_action<6, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:899:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<6, boost::lambda::function_action<6> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:927:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<6, boost::lambda::function_action<6, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1058:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Par6, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<7, boost::lambda::function_action<7, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1092:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<7, boost::lambda::function_action<7> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1123:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<7, boost::lambda::function_action<7, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1257:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Par6, class Par7, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<8, boost::lambda::function_action<8, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1291:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<8, boost::lambda::function_action<8> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1322:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<8, boost::lambda::function_action<8, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1458:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Par6, class Par7, class Par8, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<9, boost::lambda::function_action<9, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1494:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<9, boost::lambda::function_action<9> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1526:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<9, boost::lambda::function_action<9, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1673:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Par6, class Par7, class Par8, class Par9, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Arg10> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10, boost::lambda::function_action<10, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9, const Arg10>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&, const Arg10&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1710:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Arg10> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10, boost::lambda::function_action<10> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9, const Arg10>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&, const Arg10&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1743:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Arg10> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10, boost::lambda::function_action<10, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9, const Arg10>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&, const Arg10&) boostFunctionAndBind.cpp:62:52: error: no matching function for call to ‘bind(<unresolved overloaded function type>, Operations*, int, double)’ boostFunctionAndBind.cpp:62:52: note: candidates are: /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:49:1: note: template<class Result> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1, boost::lambda::function_action<1, T> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)()>::type> > boost::lambda::bind(Result (&)()) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:71:1: note: template<class Arg1> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1, boost::lambda::function_action<1> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1>::type> > boost::lambda::bind(const Arg1&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:91:1: note: template<class Result, class Arg1> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1, boost::lambda::function_action<1, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1>::type> > boost::lambda::bind(const Arg1&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:190:1: note: template<class Result, class Par1, class Arg2> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1), const Arg2>::type> > boost::lambda::bind(Result (&)(Par1), const Arg2&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:212:1: note: template<class Arg1, class Arg2> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2>::type> > boost::lambda::bind(const Arg1&, const Arg2&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:232:1: note: template<class Result, class Arg1, class Arg2> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2, boost::lambda::function_action<2, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2>::type> > boost::lambda::bind(const Arg1&, const Arg2&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:333:1: note: template<class Result, class Par1, class Par2, class Arg2, class Arg3> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3, boost::lambda::function_action<3, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2), const Arg2, const Arg3>::type> > boost::lambda::bind(Result (&)(Par1, Par2), const Arg2&, const Arg3&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:361:1: note: template<class Arg1, class Arg2, class Arg3> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3, boost::lambda::function_action<3> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:387:1: note: template<class Result, class Arg1, class Arg2, class Arg3> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3, boost::lambda::function_action<3, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:503:1: note: template<class Result, class Par1, class Par2, class Par3, class Arg2, class Arg3, class Arg4> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<4, boost::lambda::function_action<4, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3), const Arg2, const Arg3, const Arg4>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3), const Arg2&, const Arg3&, const Arg4&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:532:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<4, boost::lambda::function_action<4> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:558:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<4, boost::lambda::function_action<4, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:679:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Arg2, class Arg3, class Arg4, class Arg5> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<5, boost::lambda::function_action<5, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4), const Arg2, const Arg3, const Arg4, const Arg5>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4), const Arg2&, const Arg3&, const Arg4&, const Arg5&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:710:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<5, boost::lambda::function_action<5> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:738:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<5, boost::lambda::function_action<5, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:867:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<6, boost::lambda::function_action<6, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:899:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<6, boost::lambda::function_action<6> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:927:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<6, boost::lambda::function_action<6, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1058:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Par6, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<7, boost::lambda::function_action<7, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5, Par6), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1092:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<7, boost::lambda::function_action<7> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1123:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<7, boost::lambda::function_action<7, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1257:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Par6, class Par7, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<8, boost::lambda::function_action<8, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1291:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<8, boost::lambda::function_action<8> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1322:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<8, boost::lambda::function_action<8, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1458:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Par6, class Par7, class Par8, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<9, boost::lambda::function_action<9, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1494:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<9, boost::lambda::function_action<9> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1526:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<9, boost::lambda::function_action<9, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1673:1: note: template<class Result, class Par1, class Par2, class Par3, class Par4, class Par5, class Par6, class Par7, class Par8, class Par9, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Arg10> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10, boost::lambda::function_action<10, Result> >, typename boost::lambda::detail::bind_tuple_mapper<Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9), const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9, const Arg10>::type> > boost::lambda::bind(Result (&)(Par1, Par2, Par3, Par4, Par5, Par6, Par7, Par8, Par9), const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&, const Arg10&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1710:1: note: template<class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Arg10> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10, boost::lambda::function_action<10> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9, const Arg10>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&, const Arg10&) /boost_1_49_0_beta1/boost/lambda/detail/bind_functions.hpp:1743:1: note: template<class Result, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Arg10> const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10, boost::lambda::function_action<10, Result> >, typename boost::lambda::detail::bind_tuple_mapper<const Arg1, const Arg2, const Arg3, const Arg4, const Arg5, const Arg6, const Arg7, const Arg8, const Arg9, const Arg10>::type> > boost::lambda::bind(const Arg1&, const Arg2&, const Arg3&, const Arg4&, const Arg5&, const Arg6&, const Arg7&, const Arg8&, const Arg9&, const Arg10&) make: *** [functionAndBindTest] Error 1

On Thu, Apr 12, 2012 at 3:02 PM, Kaz <sfx810@googlemail.com> wrote:
Hi All, I came across this strange error. Binding of overloaded member functions works with boost bind, but not with boost lambda bind. Here is the example
Following builds and works fine
#include "boost/function.hpp" #include "boost/bind.hpp"
class Operations { public: void Fun1( int i ){ std::cout<<"\nfunction with one arg\n"; } void Fun1( int i, double d) {std::cout<<"\nfunction with two args\n"; } }; ----------------------- int main() { Operations op; typedef boost::function <void () > fptr; fptr func1 = boost::bind( &Operations::Fun1, &op,1); fptr func2 = boost::bind( &Operations::Fun1, &op, 1, 2.2 ); return 0; }
I'm kind of surprised this works. Perhaps bind infers the correct arity given the number of parameters, and based on the arity, the compiler is able to deduce which overload of Fun1 you want. In any case, it probably wouldn't work if you overloaded Fun1 on argument type only.
------------------------ While following Does not compile
int main() { using namespace boost::lambda; Operations op; typedef boost::function <void () > fptr; fptr func1 = bind( &Operations::Fun1, &op,1); fptr func2 = bind( &Operations::Fun1, &op, 1, 2.2 ); return 0 }
-------------------------
This spits out massive error, as shown below. I think gist of which is it can't figure out which function to instantiate, when using lambda bind. Can some body please point out what am I missing here ?
I'm guessing that, unlike boost::bind, boost::lambda::bind is not overloaded directly for member function pointers. In any case, you're probably asking for trouble with expressions like &Operations::Fun1 when Fun1 is overloaded :/
(Sorry for long email, I didn't wanted to clutter the email with this error message, bu thought most of you will figure it out just from looking at it.). Any help will be appreciated, and thanks in advance. Kaz
boostFunctionAndBind.cpp: In function ‘int main()’: boostFunctionAndBind.cpp:61:45: error: no matching function for call to ‘bind(<unresolved overloaded function type>, Operations*, int)’ boostFunctionAndBind.cpp:61:45: note: candidates are:
[...snip candidates...] - Jeff

On Thu, Apr 12, 2012 at 3:02 PM, Kaz<sfx810@googlemail.com> wrote:
Hi All, I came across this strange error. Binding of overloaded member functions works with boost bind, but not with boost lambda bind. Here is the example
Following builds and works fine
#include "boost/function.hpp" #include "boost/bind.hpp"
class Operations { public: void Fun1( int i ){ std::cout<<"\nfunction with one arg\n"; } void Fun1( int i, double d) {std::cout<<"\nfunction with two args\n"; } }; ----------------------- int main() { Operations op; typedef boost::function<void ()> fptr; fptr func1 = boost::bind(&Operations::Fun1,&op,1); fptr func2 = boost::bind(&Operations::Fun1,&op, 1, 2.2 ); return 0; }
I'm kind of surprised this works. Perhaps bind infers the correct arity given the number of parameters, and based on the arity, the compiler is able to deduce which overload of Fun1 you want. In any case, it probably wouldn't work if you overloaded Fun1 on argument type only. Correct. Boost.Bind is deducing the correct function pointer. Your assumption is correct that when overloading only on one argument, it fails. I was as surprised as you are, however, this works for phoenix too. If
On 04/13/2012 03:07 AM, Jeffrey Lee Hellrung, Jr. wrote: the OP really needs more functionality than provided by bind, he should go with phoenix.
------------------------ While following Does not compile
int main() { using namespace boost::lambda; Operations op; typedef boost::function<void ()> fptr; fptr func1 = bind(&Operations::Fun1,&op,1); fptr func2 = bind(&Operations::Fun1,&op, 1, 2.2 ); return 0 }
-------------------------
This spits out massive error, as shown below. I think gist of which is it can't figure out which function to instantiate, when using lambda bind. Can some body please point out what am I missing here ?
I'm guessing that, unlike boost::bind, boost::lambda::bind is not overloaded directly for member function pointers. In any case, you're probably asking for trouble with expressions like&Operations::Fun1 when Fun1 is overloaded :/
(Sorry for long email, I didn't wanted to clutter the email with this error message, bu thought most of you will figure it out just from looking at it.). Any help will be appreciated, and thanks in advance. Kaz
boostFunctionAndBind.cpp: In function ‘int main()’: boostFunctionAndBind.cpp:61:45: error: no matching function for call to ‘bind(<unresolved overloaded function type>, Operations*, int)’ boostFunctionAndBind.cpp:61:45: note: candidates are:
[...snip candidates...]
- Jeff
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

Thanks every one for help. Does that mean I should avoid using overloaded functions with both of bind and lambda bind ? Regards Kaz. On Fri, Apr 13, 2012 at 6:41 AM, Thomas Heller <thom.heller@googlemail.com> wrote:
On 04/13/2012 03:07 AM, Jeffrey Lee Hellrung, Jr. wrote:
On Thu, Apr 12, 2012 at 3:02 PM, Kaz<sfx810@googlemail.com> wrote:
Hi All, I came across this strange error. Binding of overloaded member functions works with boost bind, but not with boost lambda bind. Here is the example
Following builds and works fine
#include "boost/function.hpp" #include "boost/bind.hpp"
class Operations { public: void Fun1( int i ){ std::cout<<"\nfunction with one arg\n"; } void Fun1( int i, double d) {std::cout<<"\nfunction with two args\n"; } }; ----------------------- int main() { Operations op; typedef boost::function<void ()> fptr; fptr func1 = boost::bind(&Operations::Fun1,&op,1); fptr func2 = boost::bind(&Operations::Fun1,&op, 1, 2.2 ); return 0; }
I'm kind of surprised this works. Perhaps bind infers the correct arity given the number of parameters, and based on the arity, the compiler is able to deduce which overload of Fun1 you want. In any case, it probably wouldn't work if you overloaded Fun1 on argument type only.
Correct. Boost.Bind is deducing the correct function pointer. Your assumption is correct that when overloading only on one argument, it fails. I was as surprised as you are, however, this works for phoenix too. If the OP really needs more functionality than provided by bind, he should go with phoenix.
------------------------ While following Does not compile
int main() { using namespace boost::lambda; Operations op; typedef boost::function<void ()> fptr; fptr func1 = bind(&Operations::Fun1,&op,1); fptr func2 = bind(&Operations::Fun1,&op, 1, 2.2 ); return 0 }
-------------------------
This spits out massive error, as shown below. I think gist of which is it can't figure out which function to instantiate, when using lambda bind. Can some body please point out what am I missing here ?
I'm guessing that, unlike boost::bind, boost::lambda::bind is not overloaded directly for member function pointers. In any case, you're probably asking for trouble with expressions like&Operations::Fun1 when Fun1 is overloaded :/
(Sorry for long email, I didn't wanted to clutter the email with this error message, bu thought most of you will figure it out just from looking at it.). Any help will be appreciated, and thanks in advance. Kaz
boostFunctionAndBind.cpp: In function ‘int main()’: boostFunctionAndBind.cpp:61:45: error: no matching function for call to ‘bind(<unresolved overloaded function type>, Operations*, int)’ boostFunctionAndBind.cpp:61:45: note: candidates are:
[...snip candidates...]
- Jeff
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

On Fri, Apr 13, 2012 at 4:23 AM, Kaz <sfx810@googlemail.com> wrote:
Thanks every one for help. Does that mean I should avoid using overloaded functions with both of bind and lambda bind ?
No, it's just that sometimes you'll have to cast the pointer-(member-)function explicitly to disambiguate which overload you're referencing. - Jeff
participants (3)
-
Jeffrey Lee Hellrung, Jr.
-
Kaz
-
Thomas Heller