This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
c++/9619: Problem with member elements and inheritance
- From: poschmid at peem dot als dot lbl dot gov
- To: gcc-gnats at gcc dot gnu dot org
- Date: Fri, 7 Feb 2003 13:49:19 -0800
- Subject: c++/9619: Problem with member elements and inheritance
>Number: 9619
>Category: c++
>Synopsis: Problem with member elements and inheritance
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: rejects-legal
>Submitter-Id: net
>Arrival-Date: Fri Feb 07 21:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator: Peter Schmid
>Release: 3.4 20030204 (experimental)
>Organization:
LBNL
>Environment:
System: Linux linux 2.4.19-4GB #1 Wed Nov 27 00:56:40 UTC 2002 i686 unknown
Architecture: i686
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc/configure --enable-threads=posix --enable-languages=c,c++,f77,objc --enable-__cxa_atexit --disable-nls
>Description:
Current Gcc 3.4 snapshots reject the following source file t.C. Regardless
if the bases' member variable is declared as private or protected
it is not visible in the publicly derived class B. If the variable is
explicitly qualified by this->, the compiler does not barf. Previous gcc
compilers, e.g. 3.2 accept this code snipped.
>How-To-Repeat:
template<typename T>
class A {
public:
A();
virtual ~A() {}
protected:
int i;
};
template<typename T>
A<T>::A() : i(0){}
template<typename T>
class B: public A<T> {
public:
void f();
};
template<typename T>
void B<T>::f()
{
i = 3;
this ->i =2;
}
int main()
{
B<int> b;
}
g++ -v t.C -W -Wall
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.4/specs
Configured with: ../gcc/configure --enable-threads=posix --enable-languages=c,c++,f77,objc --enable-__cxa_atexit --disable-nls
Thread model: posix
gcc version 3.4 20030204 (experimental)
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.4/cc1plus -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=4 -D__GNUC_PATCHLEVEL__=0 -D_GNU_SOURCE t.C -D__GNUG__=3 -quiet -dumpbase t.C -auxbase t -W -Wall -version -o /tmp/ccgBlMM6.s
GNU C++ version 3.4 20030204 (experimental) (i686-pc-linux-gnu)
compiled by GNU C version 3.4 20030204 (experimental).
ignoring nonexistent directory "NONE/include"
ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include/c++/3.4
/usr/local/include/c++/3.4/i686-pc-linux-gnu
/usr/local/include/c++/3.4/backward
/usr/local/include
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.4/include
/usr/include
End of search list.
t.C: In member function `void B<T>::f()':
t.C:22: error: `i' has not been declared
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: