This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/32519] New: g++ allows access to protected template member functions of base class


Derived classes may access protected members of their base class only on
themselves or other instances of the same type or derived type. Here is a link
to the relevant section in the draft of the C++ standard:

http://www.csci.csusb.edu/dick/c++std/cd2/access.html#class.protected

I don't have access to the actual standard, but I figure you do :-).

The bug occurs when the protected member is a template member function. If the
protected member is a simple data member the code fails to compile as it
should.

BTW, VC++ 2005 catches this bug and refuses to compile the test program.

Test Program (bug.cpp)
----------------------
struct B
{
protected:
  template <typename T>
  T getX()
  {
    return T(x);
  }
protected:
  int x;
};

struct D : public B
{
  D(B * b)
  {
    //x = b->x;         // fails to compile (correct)
    x = b->getX<int>(); // doesn't fail to compile (bug)
  }
};

int main (int argc, char * const argv[]) 
{
  B b;
  D d(&b);
}

Output of gcc -v
----------------
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../src/gcc-4.0.2/configure  : (reconfigured)
../src/gcc-4.0.2/configure 
Thread model: posix
gcc version 4.0.2

Build command
-------------
g++ -Wall bug.cpp -o bug


-- 
           Summary: g++ allows access to protected template member functions
                    of base class
           Product: gcc
           Version: 4.0.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: gsayfan at numenta dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32519


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]