c++/9619: Problem with member elements and inheritance

poschmid@peem.als.lbl.gov poschmid@peem.als.lbl.gov
Fri Feb 7 21:56:00 GMT 2003


>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:



More information about the Gcc-bugs mailing list