
One rough idea I had was that since I will always have boost::function declarations as the default type, I could try to see if the type F is compatible with the boost::function type? Could this be done in a simple metafunction similar to the following: template<class BoostF, class F> struct CheckFunctionCompatible { static void Check() { F f; BoostF fboost = f; //If this fails, then I am basically failing } }; But then if I instantiate, won't it also try to instantiate the constructor? template<class F> class { typedef CheckFunctionCompatible<boost::function<double (double)>, F> test_F_compatibility; }; Of course, this wouldn't work for detecting the signature of the function, but that is a 2nd order feature for me. Of course, this also assumes that F can be constructed with no parameters, but this also might be reasonable for me if there is no better solution. -Jesse