This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Q: enum within template class
- To: egcs at cygnus dot com, egcs-bugs at cygnus dot com
- Subject: Q: enum within template class
- From: Vanja Cvjetko <vcvjetko at tel dot hr>
- Date: Thu, 08 Oct 1998 11:26:41 +0200
- Newsgroups: comp.lang.c++,gnu.g++.help
/**
newsgroups: comp.lang.c++,
comp.lang.c++.moderated,
egcs@cygnus.com, egcs-bugs@cygnus.com
bug-g++@prep.ai.mit.edu
gnu.g++.bug,gnu.g++.help, gnu.g++.lib.bug
comp.std.c++
reply to : vcvjetko@linux.rulz.zg.tel.hr
by removing praising the best OS
Hi!
I came up with this problem for wich I think that it could be a bug
in egcs-1.1b:
Existing class X has within its scope declared and defined enum
type.
There are 2 functions (inspector and mutator member fns) that read
and
write vlues of variable of enum type.
Following code compiles (under egcs and gcc-2.8.1) w/o any problems
if
the class X is **not** template.
In the case when X ist template:
gcc-2.8.1 compiles w/o problems
whereby
egcs-1.1b produces **wrong** compile time errors.
Is it a bug in egcs or am I doing somethnig wrong??
Thanx a lot
miljenko
Here are compile outputs:
1. gcc2 2.8.1
Reading specs from /usr/lib/gcc-lib/i586-pc-linux-gnulibc1/2.8.1/specs
gcc version 2.8.1
/usr/lib/gcc-lib/i586-pc-linux-gnulibc1/2.8.1/cpp -lang-c++ -v -I
/home/gcl/gcl/include -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus
-D__GNUC_MINOR__=8 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__
-D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS -g -Wall
-Di386 -Di586 -Asystem(unix) -Acpu(i386) -Amachine(i386) -D__i386__
-D__i586__ -Asystem(unix) -Acpu(i386) -Amachine(i386)
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp
/tmp/cca21796.ii
GNU CPP version 2.8.1 (i386 GNU/Linux with ELF)
#include "..." search starts here:
#include <...> search starts here:
/home/gcl/gcl/include
/usr/include/g++
/usr/lib/g++-include
/usr/local/include
/usr/i586-pc-linux-gnulibc1/include
/usr/lib/gcc-lib/i586-pc-linux-gnulibc1/2.8.1/include
/usr/include
End of search list.
/usr/lib/gcc-lib/i586-pc-linux-gnulibc1/2.8.1/cc1plus /tmp/cca21796.ii
-quiet -dumpbase BUG_enum_within_class_template.cc -g -Wall -version
-ftemplate-depth-45 -o /tmp/cca21796.s
GNU C++ version 2.8.1 (i586-pc-linux-gnulibc1) compiled by GNU C version
2.8.1.
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp:
In function `int main()':
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp:90:
warning: unused variable `class X<int> x_'
as -V -Qy -o /tmp/cca217961.o /tmp/cca21796.s
GNU assembler version 2.9.1 (i486-linux), using BFD version 2.9.1.0.4
ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.1 -o
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp.gcc2.x
/usr/lib/crt1.o /usr/lib/crti.o
/usr/lib/gcc-lib/i586-pc-linux-gnulibc1/2.8.1/crtbegin.o -L/usr/lib
-L/usr/lib/gcc-lib/i586-pc-linux-gnulibc1/2.8.1
-L/usr/i586-pc-linux-gnulibc1/lib -lg++ /tmp/cca217961.o -lmss -lstdc++
-lm -lgcc -lc -lgcc
/usr/lib/gcc-lib/i586-pc-linux-gnulibc1/2.8.1/crtend.o /usr/lib/crtn.o
2. egcs-1.1b
Reading specs from
/usr/egcs/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.91.57/specs
gcc version egcs-2.91.57 19980901 (egcs-1.1 release)
/usr/egcs/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.91.57/cpp -lang-c++
-v -I /home/gcl/gcl/include -undef -D__GNUC__=2 -D__GNUG__=2
-D__cplusplus -D__GNUC_MINOR__=91 -D__ELF__ -Dunix -Dlinux -D__ELF__
-D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS
-g -Wall -Asystem(unix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386
-D__i386__ -Di586 -Dpentium -D__i586 -D__i586__ -D__pentium
-D__pentium__
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp
/tmp/ccHtdHMX.ii
GNU CPP version egcs-2.91.57 19980901 (egcs-1.1 release) (i386
Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/home/gcl/gcl/include
/usr/egcs/include/g++
/usr/local/include
/usr/egcs/i586-pc-linux-gnulibc1/include
/usr/egcs/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.91.57/include
/usr/include
End of search list.
/usr/egcs/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.91.57/cc1plus
/tmp/ccHtdHMX.ii -quiet -dumpbase BUG_enum_within_class_template.cc -g
-Wall -version -ftemplate-depth-45 -o /tmp/ccOx9MSS.s
GNU C++ version egcs-2.91.57 19980901 (egcs-1.1 release)
(i586-pc-linux-gnulibc1) compiled by GNU C version egcs-2.91.57 19980901
(egcs-1.1 release).
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp:67:
new declaration `enum X<T>::Something X<T>::x_something() const'
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp:48:
ambiguates old declaration `const enum X<T>::Something
X<T>::x_something() const'
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp:
In function `int main()':
/home/gcl/gcl/example/Tests/egcs-1.1b/BUG_enum_within_class_template.cpp:90:
warning: unused variable `class X<int> x_'
*/
//--------------------------------------------------------------------------------------------
template <class T>
class X
{
public:
enum Something
{
undefined = 0,
TreeEdge = 1
};
Something s_;
void
x_something
(
const X<T >::Something ET
)
;
const
X<T >::Something
x_something
(
)
const
;
void
original
(
const X<T >& e
)
;
};
//--------------------------------------------------------------------------------------------
template <class T>
const
X<T >::Something
X<T >::x_something
(
)
const
{
return s_;
};
template <class T>
void
X<T >::x_something
(
const X<T >::Something ET
)
{
s_ = ET;
return ;
};
//--------------------------------------------------------------------------------------------
int
main
(
)
{
X<int > x_;
return 0;
};