The patch member class as template friend is finished and posted. I ended up using typename for both code cases mentioned in the previous diary:
template <class T> class C { friend class D<T>::X; template <class U> friend class D<U>::Y; };I used the fact that, after instantiation of C such as C<int>, the first one become template-parameter non-dependent while the other still depends on the template parameter U.