[Bug c++/32519] New: g++ allows access to protected template member functions of base class
gsayfan at numenta dot com
gcc-bugzilla@gcc.gnu.org
Wed Jun 27 02:56:00 GMT 2007
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
More information about the Gcc-bugs
mailing list