I think the reason is that the template function is not a type. It is a specific value if you think of it, the type of the function goes something like this:
template<
class P,
class B,
class C=bool (*)(P&)
>
class BlahBlah {
};
and it compiles. It is as if you said class C=5; this also will not compile, because 5 is not a type. I suggest you use a struct in such case.