[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