From: Sergey Lukin (lukin.s.v_at_[hidden])
Date: 2006-02-09 11:31:59


Peter Dimov replied:

> > t.async_wait(boost::bind(Component::Method1, &y, 10, boost::bind
> > (DPC::Print1, &x, 2), &t));
>
> You need to prevent the inner bind from being treated as a subexpression of
> the outer bind. Either assign it to a function<>:
>
> boost::function<void()> f = boost::bind( DPC::Print1, &x, 2 );
> t.async_wait( boost::bind( Component::Method1, &y, 10, f ) );
> or use boost::protect, as explained at the end of
>
> http://boost.org/libs/bind/bind.html#nested_binds

I tried both suggested solutions but still have the same errors

boost::function<void(int)> f = boost::bind( DPC::Print1, &x, 2 );
t.async_wait( boost::bind( Component::Method1, &y, 10, f, &t ) );
or
t.async_wait( boost::bind( Component::Method1, &y, 10,
boost::protect(f), &t ) );

It seems like boost::protect does not not affect this expression at all.
Maybe I'm doing something wrong.

Thank you in advance,

Sergey