class X
{
friend class A;
};
template <typename T1, typename T2>
class B
template <class T>
struct C
class D
B<D, class A> x;
friend struct C<A>;