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