This is the mail archive of the gcc@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]

Q: enum within template class


/**
    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;
};







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