
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
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