// { dg-do compile } | |
// Test that template friends referring to class template members are | |
// respected. | |
template <class T> struct A | |
{ | |
int f (T); | |
struct AI { | |
int f (T); | |
}; | |
}; | |
class B | |
{ | |
template <class T> friend int A<T>::f (T); | |
template <class T> friend struct A<T>::AI; | |
int a; | |
public: | |
B(): a(0) { } | |
}; | |
template <class T> int A<T>::f (T) | |
{ | |
B b; | |
return b.a; | |
} | |
template <class T> int A<T>::AI::f (T) | |
{ | |
B b; | |
return b.a; | |
} | |
int main () | |
{ | |
A<int> a; | |
A<int>::AI ai; | |
int r = a.f (0); | |
r |= ai.f (0); | |
return r; | |
} |