Bind is very convenient for use with shared_ptr: struct C { void func() {} }; shared_ptr<C> c(new C); bind(&C::func, c)(); // calls c->func() However I've found a snag when trying to do function composition: class A { shared_ptr<C> func() { return shared_ptr<C>(new C); } }; A a; bind(&C::func, bind(&A::func, a)); // doesn't work, instead must: bind(&C::func, bind(&get_pointer<B>, bind(&A::func, a))); The fact that I can work around this is obviously a good thing. But the work around is significantly less clear, especially when attempting to convince a development team that boost and bind are Good Things(tm) and they should be adopted. Is it horribly difficult to make the simpler composition work (i.e. was it tried and impossible or simply overlooked)? Thanks, Neal