Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-03-09 12:17:12


Jaakko Jarvi <jajarvi_at_[hidden]> writes:

> On Mar 9, 2004, at 11:18 AM, David Abrahams wrote:
>
>>
>> Lambda docs say:
>>
>> "When an actual argument is supplied for a placeholder, the
>> parameter passing mode is always by reference"
>>
>> Yet when I changed the following code from using boost::bind to
>> boost::lambda, I got complaints that Field is an abstract class and
>> can't be copied.
>>
>> void (self_t::* insert_)(Field const&) = &self_t::insert;
>> std::for_each(fields.begin(), fiends.end(), bind(insert_, this,
>> _1));
>>
>> What gives?
>>
>
> Can you post (email directly) a full example. I couldn't immediately
> get similar
> code to fail.

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

  using namespace boost::lambda;

  struct X
  {
      virtual void f() = 0;
  };

  struct Y : X
  {
      void f() {};
  };

  struct Z
  {
      void g(X const& x)
      {
      }

      void h(X const& x)
      {
          bind(&Z::g, this, _1)(x);
      }
  };

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk