111
|
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>
|
|
33 void A<T>::B::func1(void)
|
|
34 {
|
|
35 (void)F1<T>::foo;
|
|
36 (void)F2<T>::foo;
|
|
37 }
|
|
38
|
|
39 template <typename T>
|
|
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" }
|