> 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