1// { dg-do assemble  }
2
3template <class T> struct A {
4  static void f();
5};
6
7template <class T> class B
8{
9  friend class A<T>;
10  static int i; // { dg-error "" } private
11};
12
13template <class T> class C
14{
15  template <class U>
16  friend class A;
17
18  static int i;
19};
20
21template <class T>
22void A<T>::f()
23{
24  B<T>::i = 3;
25  C<T>::i = 3;
26  C<double>::i = 3;
27  B<double>::i = 3; // { dg-error "" } member `i' is private
28}
29
30template void A<int>::f();
31