Можно иметь друзей любого типа, но шаблон не является типом, пока не будут предоставлены аргументы шаблона. Таким образом, в общем, вы должны иметь специализацию для каждого полного типа, с которым вы хотите дружить. Это подтолкнет вас к попытке передать тип для дружбы в качестве параметра шаблона, но вы не можете предоставить тип шаблона, который будет подружиться.
например это незаконно
template <class T>
class A
{
friend class T;
};
с этими оговорками очень трудно делать что-либо значимое, полное шаблонов и дружелюбия.