This is the mail archive of the egcs@egcs.cygnus.com mailing list for the EGCS project. See the EGCS home page for more information.


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

bug with enum, templates and typedef


the following piece of code crash the compiler:

miniussi@nice > server : m truc.cpp
struct  S1 { enum E { v = 1}; };   
typedef S1::E TD;
template <TD val> struct S2 {};

miniussi@nice > server : ~/egcs/solaris/112p2/bin/g++ -c truc.cpp -v
Reading specs from
/nfs/home5/miniussi/egcs/solaris/112p2/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.91.62/specs
gcc version egcs-2.91.62 19990224 (egcs-1.1.2 pre-release-2)

/nfs/home5/miniussi/egcs/solaris/112p2/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.91.62/cpp
-lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91
-Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__
-D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4)
-D__EXCEPTIONS -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) truc.cpp
/var/tmp/ccg9yfzj.ii
GNU CPP version egcs-2.91.62 19990224 (egcs-1.1.2 pre-release-2) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /nfs/home5/miniussi/egcs/solaris/112p2/include/g++
 /usr/local/include
 /nfs/home5/miniussi/egcs/solaris/112p2/sparc-sun-solaris2.5.1/include

/nfs/home5/miniussi/egcs/solaris/112p2/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.91.62/include
 /usr/include
End of search list.

/nfs/home5/miniussi/egcs/solaris/112p2/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.91.62/cc1plus
/var/tmp/ccg9yfzj.ii -quiet -dumpbase truc.cc -version -o /var/tmp/ccFe1WWk.s
GNU C++ version egcs-2.91.62 19990224 (egcs-1.1.2 pre-release-2)
(sparc-sun-solaris2.5.1) compiled by GNU C version egcs-2.91.62 19990224
(egcs-1.1.2 pre-release-2).
truc.cpp:3: Internal compiler error.
truc.cpp:3: Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'.
truc.cpp:3: See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details.
miniussi@nice > server : 

The following variants seems to work fine:

struct  S1 { enum E { v = 1}; };   
typedef S1::E TD;
template <S1::E val> struct S2 {};
-----------------------
enum S1E {v = 1};

struct  S1 { 
  typedef S1E E;//enum E { v = 1}; 
};   

typedef S1::E TD;

template <TD val> struct S2 {};
-----------------------
struct  S1 { typedef int E; };
typedef S1::E TD;
template <TD val> struct S2 {};

Is it fixed in the last version ?

Thanks,

Alain