This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/41690] New: Scoping is incorrect for inherited classes nested inside a templated class.


When a nested class inherits from another nested class, scoping is incorrect
only if the outer class is templated.  A full .ii file follows, but to
illustrate in a compact example:

class A {
  class B {
    protected:
      int d_data;
  };
  class C : public B {
    void foo() { d_data = 0; }
  };
};

If A is *not* templated, the code will compile.  If A is templated, the
compiler complains that d_data has not been declared in the current scope.


There is no option for attaching files, so the .ii file follows:
--------------------------%<----------------------------------------

# 1 "a.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "a.cpp"
# 1 "templ.h" 1
class notempl {
private:
 int d_stuff;

 class A {
 protected:
  int d_data;
 };

 class B : public A {
  void test() {
   d_data = 0;
  }
 };

};


template <class TYPE>
class templ {
private:
 int d_stuff;

 class A {
 protected:
  int d_data;
 };

 class B : public A {
  void test() {
   d_data = 0;
  }
 };

};
# 2 "a.cpp" 2

int main() {
 notempl tmp1;
 templ<int> tmp2;

 return 0;
}

--------------------------%<----------------------------------------

Detailed compilation follows:

~/tmp/gcc-bug# g++ -v -save-temps a.cpp
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.3-5ubuntu4'
--with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3
--program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug
--enable-objc-gc --enable-mpfr --with-tune=generic --enable-checking=release
--build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4) 
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-shared-libgcc' '-mtune=generic'
 /usr/lib/gcc/x86_64-linux-gnu/4.3.3/cc1plus -E -quiet -v -D_GNU_SOURCE a.cpp
-D_FORTIFY_SOURCE=2 -mtune=generic -fpch-preprocess -o a.ii
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-linux-gnu/4.3.3/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/usr/include/x86_64-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.3
 /usr/include/c++/4.3/x86_64-linux-gnu
 /usr/include/c++/4.3/backward
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.3.3/include
 /usr/lib/gcc/x86_64-linux-gnu/4.3.3/include-fixed
 /usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-shared-libgcc' '-mtune=generic'
 /usr/lib/gcc/x86_64-linux-gnu/4.3.3/cc1plus -fpreprocessed a.ii -quiet
-dumpbase a.cpp -mtune=generic -auxbase a -version -fstack-protector -o a.s
GNU C++ (Ubuntu 4.3.3-5ubuntu4) version 4.3.3 (x86_64-linux-gnu)
        compiled by GNU C version 4.3.3, GMP version 4.2.4, MPFR version 2.4.0.
GGC heuristics: --param ggc-min-expand=97 --param ggc-min-heapsize=126404
Compiler executable checksum: d9dd67dcc191271ac69fd2c05266cf9c
In file included from a.cpp:2:
templ.h: In member function void templ<TYPE>::B::test():
templ.h:31: error: d_data was not declared in this scope


-- 
           Summary: Scoping is incorrect for inherited classes nested inside
                    a templated class.
           Product: gcc
           Version: 4.3.3
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: timothy dot renner at gmail dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41690


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]