> 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

Reply via email to