public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/9410: [3.4 regression] inability to access a base classes' member from a templated derived class
@ 2003-01-23  0:25 bangerth
  0 siblings, 0 replies; 2+ messages in thread
From: bangerth @ 2003-01-23  0:25 UTC (permalink / raw)
  To: andrew, gcc-bugs, gcc-prs, nobody

Synopsis: [3.4 regression] inability to access a base classes' member from a templated derived class

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Thu Jan 23 00:25:35 2003
State-Changed-Why:
    That's indeed a complexity of C++. A lone identifier (like "a"), that is not obviously template dependent, will be looked
    up at the time the compiler sees the class, not at instantiation
    time. However, at that point, no information about base
    classes is available yet, so it will not find members of
    the base class.
    
    Regards
      Wolfgang

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9410


^ permalink raw reply	[flat|nested] 2+ messages in thread

* c++/9410: [3.4 regression] inability to access a base classes' member from a templated derived class
@ 2003-01-22 23:06 andrew
  0 siblings, 0 replies; 2+ messages in thread
From: andrew @ 2003-01-22 23:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         9410
>Category:       c++
>Synopsis:       [3.4 regression] inability to access a base classes' member from a templated derived class
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Wed Jan 22 23:06:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Andrew Pollard
>Release:        gcc-3.4-20030122
>Organization:
>Environment:
i686-pc-linux-gnu on RedHat8.0/PIII
>Description:
The following snippet of code no longer compiles.

I'm fairly certain it should compile (but I'm not a language laywer).

Previous versions of gcc compile it (including gcc-3.4-20030116)

hidden.cxx:
-----------
struct A {
    int a;
};

template<typename T>
struct B : public A {
};

template<typename T>
struct C : public B<T> {
    int foo() { return (a); }
    int bar() { return (this->a); }
};
----------

% g++34 hidden.cxx -c
hidden.cxx: In member function `int C<T>::foo()':
hidden.cxx:11: error: `a' has not been declared

Note how the use with (this->a) works. From a language point of view I would have expected both to work or both to fail.

Is this a bug, or just another inability of mine to understand the complexity of templates in C++?
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-01-23  0:25 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-23  0:25 c++/9410: [3.4 regression] inability to access a base classes' member from a templated derived class bangerth
  -- strict thread matches above, loose matches on Subject: below --
2003-01-22 23:06 andrew

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).