Re: Confusing about the accessibility of the base class

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11 May 2011 11:04, zhang qingshan wrote:
> Hi, guys,
>
> I test the following testcase with GCC 4.6
>
> struct A {
> private:
>   struct Patch {};
> };
>
> #ifdef TMPL
> template <int x>
> #endif
> struct X : private A
> {
>   void f () {
>      typedef A::Patch Patch;
>   }
> };
> int main()
> {
> #ifdef TMPL
>  X<1> d;
> #else
>  X d;
> #endif
>  d.f();
> }
>
> If TMPL is not defined, get the error message:
>
> /data/a.cpp: In member function 'void X::f()':
> /data/a.cpp:3:11: error: 'struct A::Patch' is private
> /data/a.cpp:12:24: error: within this context
>
> which makes sense, as struct Patch is the private member of struct A.
> But if TMPL is defined, GCC compiles it clean. This confuses me.
>

It's a bug.

Unfortunately there are several bugs related to access-checking in
templates:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40901
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48078
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47346
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45917
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41437



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux