1// { dg-do assemble  }
2template <class T>
3class C;
4
5template <class T>
6struct S
7{
8  template <class U>
9  void f(U u)
10    {
11      C<U> cu;
12      cu.i = 3; // { dg-error "" } S<double>::f<U> is a friend, but this is
13                //         S<int>::f<double>.
14    }
15};
16
17
18template <class T>
19class C
20{
21  template <class U>
22  friend void S<T>::f(U);
23
24  int i; // { dg-error "" } private
25};
26
27
28int main()
29{
30  S<int> si;
31  si.f(3.0);
32}
33