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