3 // Copyright (C) 2003 Free Software Foundation
4 // Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
6 // Member function of class template as friend
7 // Erroneous case: mismatch during specialization
9 template <class T> struct A {
10 template <class U> void f(U);
14 template <T t> void j();
18 int ii; // { dg-message "private" }
19 template <class U> template <class V>
20 friend void A<U>::f(V);
21 template <class U> friend void A<U>::g();
22 template <class U> friend void A<U>::h();
23 template <class U> friend void A<U>::i(int);
24 template <class U> template <U t>
25 friend void A<U>::j();
28 template <class T> struct A<T*> {
30 template <class U> void g();
33 template <int> void j();
36 template <class T> void A<T*>::f(int)
39 c.ii = 0; // { dg-error "context" }
42 template <class T> template <class U> void A<T*>::g()
45 c.ii = 0; // { dg-error "context" }
48 template <class T> int A<T*>::h()
51 c.ii = 0; // { dg-error "context" }
55 template <class T> void A<T*>::i(char)
58 c.ii = 0; // { dg-error "context" }
61 template <class T> template <int> void A<T*>::j()
64 c.ii = 0; // { dg-error "context" }
67 template <> struct A<char> {
69 template <class U> void g();
72 template <int> void j();
78 c.ii = 0; // { dg-error "context" }
81 template <class U> void A<char>::g()
84 c.ii = 0; // { dg-error "context" }
87 template <> void A<char>::g<int>()
90 c.ii = 0; // { dg-error "context" }
96 c.ii = 0; // { dg-error "context" }
100 void A<char>::i(char)
103 c.ii = 0; // { dg-error "context" }
106 template <int> void A<char>::j()
109 c.ii = 0; // { dg-error "context" }
112 template <> void A<char>::j<0>()
115 c.ii = 0; // { dg-error "context" }
121 a1.f(0); // { dg-message "required" }
122 a1.g<char>(); // { dg-message "required" }
123 a1.g<int>(); // { dg-message "required" }
124 a1.h(); // { dg-message "required" }
125 a1.i('a'); // { dg-message "required" }
126 a1.j<1>(); // { dg-message "required" }
129 a2.g<char>(); // { dg-message "required" }
133 a2.j<1>(); // { dg-message "required" }