1 // { dg-do compile }
2 
3 // Origin: Giovanni Bajo <giovannibajo@libero.it>
4 
5 // PR c++/13495: Nested class as template friend.
6 
7 template<typename T>
8 class A{
9 public:
10     class B
11     {
12         void func1(void);
13         void func2(void);
14     };
15 };
16 
17 template<typename Q>
18 class F1
19 {
20     friend class A<Q>::B;
21     enum { foo = 0 };	// { dg-message "private" }
22 };
23 
24 template<typename Q>
25 class F2
26 {
27     template<typename T>
28     friend class A<T>::B;
29     enum { foo = 0 };
30 };
31 
32 template <typename T>
func1(void)33 void A<T>::B::func1(void)
34 {
35     (void)F1<T>::foo;
36     (void)F2<T>::foo;
37 }
38 
39 template <typename T>
func2(void)40 void A<T>::B::func2(void)
41 {
42     (void)F1<T*>::foo;	// { dg-error "context" }
43     (void)F2<T*>::foo;
44 }
45 
46 template class A<int>;	// { dg-message "required" }
47