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; } === [EMAIL PROTECTED] 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' [EMAIL PROTECTED] 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; } === [EMAIL PROTECTED] tmp]$ /opt/intel_cc_80/bin/icc -c nested_defs.cpp [EMAIL PROTECTED] 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