Hi, i'm facing this problem may be someone on the list do have an elegant solution class A; class B; class C { int operator () (A*,B*) }; typedef int (*foobar)(A*,B*); void do_something(foobar cb); C obj; do_something(obj); *ERROR* did try boost::function<int(A*,B*)> ftor = obj; do_something(ftor); *ERROR* compiler generates in both cases the following error messages cannot convert parameter 2 from 'boost::function<Signature>' to 'int (__cdecl *)(A *,B *)' with 1> [ 1> Signature=int (A *, B *) 1> ] 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called I can't make the corresponding class B member function static due to side-effects. Any clue how to get rid of this? Thanks in advance Mike