Zur Verdeutlichung einige Beispiele
class normale_klasse {}; template <class T> class testklasse; template <class T> class template_klasse { }; template <class T> class zweite_template_klasse { public: void(f); };void normale_funktion(); template <class T> void template_funktion(testklasse<T> x);
template <class T> class testklasse { friend normale_klasse; // Das kennen wir schon friend template_klasse<T>; // 1-1-Beziehung: Nur korrespondierende Klasse friend zweite_template_klasse<T>::f(); // 1-1-Beziehung, aber nur f() befreundet friend normale_funktion(); // Das kennen wir auch friend template_funktion(testklasse<T>); // 1-1-Beziehung: Nur für selben Typ erlaubt
template <class U> friend template_klasse<U>; // 1-viele-Beziehung: alle template_klasse<U> // sind für beliebiges U befreundet template <class U> friend zweite_template_klasse<U>::f(); // analog
template <class U> friend template_funktion(testklasse<U>); // analog