[Bug c++/21484] New: [g++] using typename doesn't work in case template : template inheritance

smelkov at mph1 dot phys dot spbu dot ru gcc-bugzilla@gcc.gnu.org
Tue May 10 08:26:00 GMT 2005


Is it just me or what? 
 
===nested_defs.cpp=== 
template<typename T> 
struct A 
{ 
    typedef T value_type; 
}; 
 
 
template<class T> 
struct B : A<T> 
{ 
    using typename A<T>::value_type; 
    value_type  x; 
}; 
 
 
 
int main() 
{ 
    B<int> b; 
    b.x = 0; 
 
    return 0; 
} 
 
=== 
 
[kirr@tugrik tmp]$ g++ -g -c -Wall nested_defs.cpp  
nested_defs.cpp:12: error: 'value_type' does not name a type 
nested_defs.cpp:12: note: (perhaps 'typename A<T>::value_type' was intended) 
nested_defs.cpp: In function 'int main()': 
nested_defs.cpp:20: error: 'struct B<int>' has no member named 'x' 
 
[kirr@tugrik tmp]$ g++ -v 
Using built-in specs. 
Target: i686-pc-linux-gnu 
Configured with: ../gcc-4.0.0/configure --prefix=/usr/local/gcc-4.0.0--nocheck-native 
--with-gnu-as --with-gnu-ld --enable-threads=posix --with-arch=pentium3 
--with-tune=pentium4 --enable-__cxa_atexit --enable-languages=c,c++,java,f95 
--disable-checking --disable-nls 
Thread model: posix 
gcc version 4.0.0 
 
 
 
With Comeau C++ & Intel 8.0 C++ it is ok. 
 
 
--- 
By the way, if i want to access all members of A<T> inside B, without explicit using, typedef, 
etc, what can i do? 
 
damn, if B is not template it works 
 
=== 
template<typename T> 
struct A 
{ 
    typedef T value_type; 
}; 
 
 
struct B : A<int> 
{ 
    value_type  x; 
}; 
=== 
 
if A is not template it also works: 
 
=== 
struct A 
{ 
    typedef int value_type; 
}; 
 
 
template<typename T> 
struct B : A 
{ 
    value_type  x; 
}; 
=== 
 
only for template : template case it doesn't compile (g++, Comeau), although intel C++ 8.0 
works ok: 
 
=== 
template<typename T> 
struct A 
{ 
    typedef T value_type; 
}; 
 
 
template<typename T> 
struct B : A<T> 
{ 
    value_type  x; 
}; 
 
 
 
int main() 
{ 
    B<int> b; 
    b.x = 0; 
 
    return 0; 
} 
=== 
 
[kirr@tugrik tmp]$ /opt/intel_cc_80/bin/icc -c nested_defs.cpp  
[kirr@tugrik tmp]$ echo $? 
0

-- 
           Summary: [g++] using typename doesn't work in case template :
                    template inheritance
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: smelkov at mph1 dot phys dot spbu dot ru
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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



More information about the Gcc-bugs mailing list