bool compare_not_equal(const Function& f, const Functor& g, long, mpl::bool_<false>) { if (const Functor* fp = f.template target<Functor>()) return !function_equal(*fp, g); else return true; }
bool compare_equal(const Function& f, const Functor& g, long, false_type) { if (const Functor* fp = f.template target<Functor>()) return function_equal(*fp, g); else return false; }