// Build don't link:

// by Alexandre Oliva <oliva@dcc.unicamp.br>

// I'm not 100% sure this program is correct, but g++ shouldn't just
// crash.

// The idea is to give privileged access to bar<A> only to
// specializations foo<A,B>, for all B.

template <class A, class B> void foo();
template <class C> class bar {
  int i; // ERROR - private
  template <class B> friend void foo<C,B>(); // ERROR - bogus declaration
};
template <class A, class B> void foo() {
  bar<A> baz; baz.i = 1;   // ERROR - foo cannot access bar<int>::i
  bar<int> buz; buz.i = 1; // ERROR - foo cannot access bar<int>::i
}
int main() {
  foo<void,void>();
  foo<int,void>();
}
