Это то, что я понимаю. Я выделил отдельные фрагменты кода в строке кода, помеченной в соответствии с номерами строк в OP.
struct A{
void f(){}
};
template<class T> struct B{};
// The template argument B<T> is TYPE depdent on the template parameter T (1)
template<class T, class U = B<T> > struct T1{};
// The template argument c is VALUE dependent on the template non type parameter 'c' (2)
template<class T, char c, int d = c> struct T2{};
// The 2nd template argument is TYPE depdent on the template parameter T (3)
template<class T, void (T::*p)(void) = &T::f> struct T3{};
// The template template argument B is TYPE depdent on the template parameter T (4)
template<class T, template<class U = T> class V = B> struct T4{};
int main(){
T1<int> t1;
T2<int, 'A', 2> t2;
T3<A> t3;
T4<A> t4;
}