[tuple, lambda] predicate does not compile

Hello Newsgroup, in the following code the call bind (&boost::tuple<int, double>::get<0>, _1) does not compile whereas an analogous call with a non-template parameter compiles fine. What am I doing wrong? I'm using boost 1.33.1 and Visual Studio 7.1 Thanks in advance, Christian #include <vector> #include <algorithm> #include <string> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> #include <boost/tuple/tuple.hpp> class SearchForMe { std::string a_; public: std::string getA () {return a_;} }; int main(int argc, char* argv[]) { using namespace std; using namespace boost::lambda; vector<SearchForMe> foo; // compiles fine find_if (foo.begin (), foo.end (), bind (&SearchForMe::getA, _1) == "apple"); vector< boost::tuple<int, double> > bar; // does not compile find_if (bar.begin (), bar.end (), bind (&boost::tuple<int, double>::get<0>, _1) == 15); return 0; } The error messages are: Compiling... boost_lambda.cpp d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(232) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(232) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ] d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ] d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ] d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::bind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : expects 1 arguments - 2 provided d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(91) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : expects 1 arguments - 2 provided with [ Arity=1, Act=boost::lambda::function_action<1> ] d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(71) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(void)>::type>> boost::lambda::bind(Result (__cdecl &)(void))' : expects 1 arguments - 2 provided d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(49) : see declaration of 'boost::lambda::bind'

On Feb 16, 2006, at 2:36 AM, Christian Rössel wrote:
Hello Newsgroup,
in the following code the call bind (&boost::tuple<int, double>::get<0>, _1) does not compile whereas an analogous call with a non-template parameter compiles fine. What am I doing wrong?
If I remember correctly, get has two overloads (one const, one without const). One cannot take the address of an overloaded (member) function without specifying its type. (This is without looking at the tuple code, so comes with a caveat) Best, Jaakko Järvi
I'm using boost 1.33.1 and Visual Studio 7.1
Thanks in advance, Christian
#include <vector> #include <algorithm> #include <string> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> #include <boost/tuple/tuple.hpp>
class SearchForMe { std::string a_; public: std::string getA () {return a_;} };
int main(int argc, char* argv[]) { using namespace std; using namespace boost::lambda;
vector<SearchForMe> foo; // compiles fine find_if (foo.begin (), foo.end (), bind (&SearchForMe::getA, _1) == "apple");
vector< boost::tuple<int, double> > bar; // does not compile find_if (bar.begin (), bar.end (), bind (&boost::tuple<int, double>::get<0>, _1) == 15);
return 0; }
The error messages are:
Compiling... boost_lambda.cpp d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(232) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(232) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ]
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ]
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ]
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::b ind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : expects 1 arguments - 2 provided
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(91) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : expects 1 arguments - 2 provided with [ Arity=1, Act=boost::lambda::function_action<1> ]
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(71) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::b ind_tuple_mapper<Result(__cdecl &)(void)>::type>> boost::lambda::bind(Result (__cdecl &)(void))' : expects 1 arguments - 2 provided
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(49) : see declaration of 'boost::lambda::bind'
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

Jaakko Jarvi schrieb:
On Feb 16, 2006, at 2:36 AM, Christian Rössel wrote:
Hello Newsgroup,
in the following code the call bind (&boost::tuple<int, double>::get<0>, _1) does not compile whereas an analogous call with a non-template parameter compiles fine. What am I doing wrong?
If I remember correctly, get has two overloads (one const, one without const). One cannot take the address of an overloaded (member) function without specifying its type.
(This is without looking at the tuple code, so comes with a caveat)
Best, Jaakko Järvi
Thanks for the hint. If I add a "const std::string getA () const {return a_;}" to the SearchForMe class then I have to change bind (&SearchForMe::getA, _1) == "apple"); to bind (static_cast<string (SearchForMe::*)()> (&SearchForMe::getA), _1) == "apple"); or to bind (static_cast<string (SearchForMe::*const)()> (&SearchForMe::getA), _1) == "apple"); and everthings works fine. However, if I do the same with the tuple-code bind (static_cast<int (boost::tuple<int, double>::*)()> (&boost::tuple<int, double>::get<0>), _1) == 15); I still get compile errors: error C2440: 'static_cast' : cannot convert from 'overloaded-function' to 'int (__thiscall boost::tuples::tuple<T0,T1>::* )(void)' with [ T0=int, T1=double ] None of the functions with this name in scope match the target type The entire error message is attached. Thanks, Christian
I'm using boost 1.33.1 and Visual Studio 7.1
Thanks in advance, Christian
#include <vector> #include <algorithm> #include <string> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> #include <boost/tuple/tuple.hpp>
class SearchForMe { std::string a_; public: std::string getA () {return a_;} };
int main(int argc, char* argv[]) { using namespace std; using namespace boost::lambda;
vector<SearchForMe> foo; // compiles fine find_if (foo.begin (), foo.end (), bind (&SearchForMe::getA, _1) == "apple");
vector< boost::tuple<int, double> > bar; // does not compile find_if (bar.begin (), bar.end (), bind (&boost::tuple<int, double>::get<0>, _1) == 15);
return 0; }
The error messages are:
Compiling... boost_lambda.cpp d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(232) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(232) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ]
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ]
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type' with [ Arity=2, Act=boost::lambda::function_action<2> ]
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(212) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2784: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<2,boost::lambda::function_action<2,Result>>,detail::b ind_tuple_mapper<Result(__cdecl &)(Par1),const Arg2>::type>> boost::lambda::bind(Result (__cdecl &)(Par1),const Arg2 &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(190) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::b ind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : expects 1 arguments - 2 provided
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(91) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : expects 1 arguments - 2 provided with [ Arity=1, Act=boost::lambda::function_action<1> ]
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(71) : see declaration of 'boost::lambda::bind' d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda \boost_lambda.cpp(31) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost ::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::b ind_tuple_mapper<Result(__cdecl &)(void)>::type>> boost::lambda::bind(Result (__cdecl &)(void))' : expects 1 arguments - 2 provided
d:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(49) : see declaration of 'boost::lambda::bind'
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
------ Build started: Project: boost_lambda, Configuration: Release Win32 ------ Compiling... boost_lambda.cpp boost_lambda.cpp(47) : error C2440: 'static_cast' : cannot convert from 'overloaded-function' to 'int (__thiscall boost::tuples::tuple<T0,T1>::* )(void)' with [ T0=int, T1=double ] None of the functions with this name in scope match the target type boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10,boost::lambda::function_action<10,Result>>,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 &)' : expects 10 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1743) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,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 &)' : expects 10 arguments - 2 provided with [ Arity=10, Act=boost::lambda::function_action<10> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1710) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<10,boost::lambda::function_action<10,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(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 (__cdecl &)(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 &)' : expects 10 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1673) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<9,boost::lambda::function_action<9,Result>>,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 &)' : expects 9 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1526) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,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 &)' : expects 9 arguments - 2 provided with [ Arity=9, Act=boost::lambda::function_action<9> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1494) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<9,boost::lambda::function_action<9,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(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 (__cdecl &)(Par1,Par2,Par3,Par4,Par5,Par6,Par7,Par8),const Arg2 &,const Arg3 &,const Arg4 &,const Arg5 &,const Arg6 &,const Arg7 &,const Arg8 &,const Arg9 &)' : expects 9 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1458) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<8,boost::lambda::function_action<8,Result>>,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 &)' : expects 8 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1322) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,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 &)' : expects 8 arguments - 2 provided with [ Arity=8, Act=boost::lambda::function_action<8> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1291) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<8,boost::lambda::function_action<8,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(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 (__cdecl &)(Par1,Par2,Par3,Par4,Par5,Par6,Par7),const Arg2 &,const Arg3 &,const Arg4 &,const Arg5 &,const Arg6 &,const Arg7 &,const Arg8 &)' : expects 8 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1257) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<7,boost::lambda::function_action<7,Result>>,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 &)' : expects 7 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1123) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,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 &)' : expects 7 arguments - 2 provided with [ Arity=7, Act=boost::lambda::function_action<7> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1092) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<7,boost::lambda::function_action<7,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1,Par2,Par3,Par4,Par5,Par6),const Arg2,const Arg3,const Arg4,const Arg5,const Arg6,const Arg7>::type>> boost::lambda::bind(Result (__cdecl &)(Par1,Par2,Par3,Par4,Par5,Par6),const Arg2 &,const Arg3 &,const Arg4 &,const Arg5 &,const Arg6 &,const Arg7 &)' : expects 7 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(1058) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<6,boost::lambda::function_action<6,Result>>,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 &)' : expects 6 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(927) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,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 &)' : expects 6 arguments - 2 provided with [ Arity=6, Act=boost::lambda::function_action<6> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(899) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<6,boost::lambda::function_action<6,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1,Par2,Par3,Par4,Par5),const Arg2,const Arg3,const Arg4,const Arg5,const Arg6>::type>> boost::lambda::bind(Result (__cdecl &)(Par1,Par2,Par3,Par4,Par5),const Arg2 &,const Arg3 &,const Arg4 &,const Arg5 &,const Arg6 &)' : expects 6 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(867) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<5,boost::lambda::function_action<5,Result>>,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 &)' : expects 5 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(738) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,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 &)' : expects 5 arguments - 2 provided with [ Arity=5, Act=boost::lambda::function_action<5> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(710) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<5,boost::lambda::function_action<5,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1,Par2,Par3,Par4),const Arg2,const Arg3,const Arg4,const Arg5>::type>> boost::lambda::bind(Result (__cdecl &)(Par1,Par2,Par3,Par4),const Arg2 &,const Arg3 &,const Arg4 &,const Arg5 &)' : expects 5 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(679) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<4,boost::lambda::function_action<4,Result>>,detail::bind_tuple_mapper<const Arg1,const Arg2,const Arg3,const Arg4>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &,const Arg3 &,const Arg4 &)' : expects 4 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(558) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2,const Arg3,const Arg4>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &,const Arg3 &,const Arg4 &)' : expects 4 arguments - 2 provided with [ Arity=4, Act=boost::lambda::function_action<4> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(532) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<4,boost::lambda::function_action<4,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1,Par2,Par3),const Arg2,const Arg3,const Arg4>::type>> boost::lambda::bind(Result (__cdecl &)(Par1,Par2,Par3),const Arg2 &,const Arg3 &,const Arg4 &)' : expects 4 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(503) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3,boost::lambda::function_action<3,Result>>,detail::bind_tuple_mapper<const Arg1,const Arg2,const Arg3>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &,const Arg3 &)' : expects 3 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(387) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1,const Arg2,const Arg3>::type>> boost::lambda::bind(const Arg1 &,const Arg2 &,const Arg3 &)' : expects 3 arguments - 2 provided with [ Arity=3, Act=boost::lambda::function_action<3> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(361) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<3,boost::lambda::function_action<3,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(Par1,Par2),const Arg2,const Arg3>::type>> boost::lambda::bind(Result (__cdecl &)(Par1,Par2),const Arg2 &,const Arg3 &)' : expects 3 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(333) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::bind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : expects 1 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(91) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<Arity,Act>,detail::bind_tuple_mapper<const Arg1>::type>> boost::lambda::bind(const Arg1 &)' : expects 1 arguments - 2 provided with [ Arity=1, Act=boost::lambda::function_action<1> ] D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(71) : see declaration of 'boost::lambda::bind' boost_lambda.cpp(47) : error C2780: 'const boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::action<1,boost::lambda::function_action<1,Result>>,detail::bind_tuple_mapper<Result(__cdecl &)(void)>::type>> boost::lambda::bind(Result (__cdecl &)(void))' : expects 1 arguments - 2 provided D:\home\roe\boost_1_33_1\boost\lambda\detail\bind_functions.hpp(49) : see declaration of 'boost::lambda::bind' Build log was saved at "file://d:\home\roe\c++_tests\boost_lambda\boost_lambda\boost_lambda\Release\BuildLog.htm" boost_lambda - 28 error(s), 0 warning(s) ---------------------- Done ---------------------- Build: 0 succeeded, 1 failed, 0 skipped

On Feb 17, 2006, at 4:14 AM, Christian Rössel wrote:
Thanks for the hint. If I add a "const std::string getA () const {return a_;}" to the SearchForMe class then I have to change
bind (&SearchForMe::getA, _1) == "apple");
to
bind (static_cast<string (SearchForMe::*)()> (&SearchForMe::getA), _1) == "apple");
or to
bind (static_cast<string (SearchForMe::*const)()> (&SearchForMe::getA), _1) == "apple");
and everthings works fine. However, if I do the same with the tuple-code
bind (static_cast<int (boost::tuple<int, double>::*)()> (&boost::tuple<int, double>::get<0>), _1) == 15);
I still get compile errors:
Get returns a reference. So try: bind (static_cast<int& (boost::tuple<int, double>::*)()> ... instead. Best, Jaakko
participants (2)
-
Christian Rössel
-
Jaakko Jarvi