struct aderived; struct aderived2; struct abase{ abase() : pblc(0), prtd(0), prvt(0){} public: int pblc; protected: int prtd; private: int prvt;
friend void frb(abase *pb, aderived *pd); }; struct aderived : protected abase{ void fn(abase *pb, aderived* pd, aderived2 *pd2); friend void frd(abase *pb, aderived *pd, aderived2 *pd2); }; struct aderived2 : aderived{}; void frb(abase *pb, aderived *pd){ pb->pblc++; pb->prtd++; pb->prvt++; pd->pblc++; pd->prtd++; pd->prvt++; } int main(){} This code gives the following compilation error: j.cpp: In function void frb(abase*, aderived*): j.cpp:16: error: int abase::prvt is private j.cpp:35: error: within this context However Visual Studio 2008 and Comeau Online Compiler give error in all the three statements a) pd->pblc++; b) pd->prtd++; c) pd->prvt++; "ComeauTest.c", line 28: error: member "abase::pblc" (declared at line 7) is inaccessible pd->pblc++; ^ "ComeauTest.c", line 29: error: member "abase::prtd" (declared at line 9) is inaccessible pd->prtd++; ^ "ComeauTest.c", line 30: error: member "abase::prvt" (declared at line 11) is inaccessible pd->prvt++; -- Summary: Friend Functions of the Base accessing Derived Class Members Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: blocker Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: anubhav dot saxena at wipro dot com GCC build triplet: i386-redhat-linux GCC host triplet: i386-redhat-linux GCC target triplet: i386-redhat-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38068