// { dg-do assemble } // f() should be able to access B::j, as of FDIS [class.protected]/1 // Subject: Re: [bug] Inheritance and friend access control broken // References: <199803032141.WAA09332@piano.dptmaths.ens-cachan.fr> // // <199803041125.MAA06937@cor.dptmaths.ens-cachan.fr> // <19980304102900.46897@dgii.com> // From: Alexandre Oliva // Date: 06 Mar 1998 01:43:18 -0300 template class X {}; template void g(); struct S; template struct R; class B { protected: int i; // { dg-error "" } in this context static int j; }; class D : public B { friend void f(); template friend void g(); friend struct S; template friend struct R; }; struct S { void h(); X<&B::j> x; }; template struct R { void h(); X<&B::j> x; }; B b; D d; void f() { b.i = 3; // { dg-error "" } protected d.i = 4; B::j = 5; D::j = 6; } template void g() { b.i = 3; // { dg-error "" } protected d.i = 4; B::j = 5; D::j = 6; } template void g(); void S::h() { b.i = 3; // { dg-error "" } protected d.i = 4; B::j = 5; D::j = 6; } template void R::h() { b.i = 3; // { dg-error "" } protected d.i = 4; B::j = 5; D::j = 6; } template struct R;