1// { dg-do compile } 2// Test that template friends referring to class template members are 3// respected. 4 5 6template <class T> struct A 7{ 8 int f (T); 9 struct AI { 10 int f (T); 11 }; 12}; 13 14class B 15{ 16 template <class T> friend int A<T>::f (T); 17 template <class T> friend struct A<T>::AI; 18 int a; 19public: 20 B(): a(0) { } 21}; 22 23template <class T> int A<T>::f (T) 24{ 25 B b; 26 return b.a; 27} 28 29template <class T> int A<T>::AI::f (T) 30{ 31 B b; 32 return b.a; 33} 34 35int main () 36{ 37 A<int> a; 38 A<int>::AI ai; 39 40 int r = a.f (0); 41 r |= ai.f (0); 42 43 return r; 44} 45