template<class A,class B=BB<A> > class C { //... };
class X { //... };
template<X,class B=BB<X> > class C<X,B> { //... };
template<class B=BB<X> > class C<X,B> { //... };