Boost logo

Boost Users :

From: Christian Rössel (christian.roessel_at_[hidden])
Date: 2006-02-16 03:36:14


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'


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net