This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Insufficient access check for private static member in base class
- From: "Peter A. Felvegi" <petschy at praire-chicken dot com>
- To: gcc at gcc dot gnu dot org
- Date: Fri, 18 May 2012 14:08:00 +0200
- Subject: Insufficient access check for private static member in base class
Hello,
I've bumped into the following:
----8<----8<----8<----8<----
class Base
{
static
int foo;
};
#if 0
class Deriv : public Base
{
public:
int Foo() { return foo; }
};
#endif
template<typename T>
class DerivT : public Base
{
public:
int Foo() { return foo; }
};
void bar()
{
DerivT<void> dt;
dt.Foo();
}
----8<----8<----8<----8<----
All versions I've tried (4.4, 4.5, 4.6, 4.7) compiles the code. clang
gives proper diagnostic stating that Base::foo is private.
If base::foo is not static, gcc catches the error, too:
gccacbug.cpp: In member function âint DerivT<T>::Foo() [with T = void]â:
gccacbug.cpp:25: instantiated from here
gccacbug.cpp:4: error: âint Base::fooâ is private
gccacbug.cpp:19: error: within this context
If I enable the non-templated Deriv class, I get an error (twice):
gccacbug.cpp: In member function âint Deriv::Foo()â:
gccacbug.cpp:3:13: error: âint Base::fooâ is private
gccacbug.cpp:10:21: error: within this context
gccacbug.cpp:3:13: error: âint Base::fooâ is private
gccacbug.cpp:10:21: error: within this context
Searching bugzilla for 'static member access' didn't give any results.
Should I file a bug report?
Regards, Peter