> cat gcc_private_inheritance.cpp : class A {}; class B : public A {}; class C : private B { public: operator A& () {return *this;} };
void doSomething (const A&) {} int main (int argc, char** argv){ C instC; // Attempt 1. Causes compiler error, not expected doSomething (instC.operator A&()); // Attempt 2. Causes compiler error, standard-conforming behaviour doSomething (instC); // Attempt 3. Fine! doSomething (instC.C::operator A&()); return 0; } > g++ gcc_private_inheritance.cpp -Wall -save-temps : gcc_private_inheritance.cpp: In function int main(int, char**): gcc_private_inheritance.cpp:1: error: class A is inaccessible gcc_private_inheritance.cpp:13: error: within this context gcc_private_inheritance.cpp:15: error: A is an inaccessible base of C I don`t see why (1) attempt to call 'C::operator A&' method should fail while (3) attempt succeeds. -- Summary: Operator method lookup failure Product: gcc Version: 4.4.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kxx at gmx dot com GCC build triplet: i586-suse-linux GCC host triplet: i586-suse-linux GCC target triplet: i586-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43189