I'm currently trying to make some generic adaptator between a large numbers of legacy code and a library of mine that provides a simple way of distributing code over cluster's nodes. A classic example (in fatc the simplest one ) is that : 1/ users have a library of compiled function with prototype like some_type func(const some_other_type& x, const some_another type& y, const yet_another_type& z ); 2/ my library awaits functor with the following prototype void operator()( const some_other_type& x, const some_another type& y, const yet_another_type& z, some_type& out ); Now combine this with function using non-const reference or pointer as argument to return more than one results or functions having either arguments or alwasy returning void. There is no cap on # of arguments. I was thinking to find a way to detect the return type of any "free function" pointer from the user library and detecting its arguments type, build the corresponding function object and assign it with the user function pointer before passsing it to my own code. Basically, making this code float some_func( const float& f ); floatoutput; float input run( pipeline(seq(some_func),seq(some_func)) )(input)(output); build a 2 staegs pipeline (thsi is already done) that somehow use the boost::function wrapper around the free function as callable entity, making seq able to do all the grunt work of findidng the correct boost::function<> type. Does it seems viable or I am making some wrong assumptions on the capabilities of boost::functions ? Thanks for your insight -- Joel FALCOU Research Engineer @ Institut d'Electronique Fondamentale Université PARIS SUD XI France