------- Additional Comments From reichelt at gcc dot gnu dot org 2005-02-18 13:00 ------- The problem can be reduced to the following testacse:
================================== int Sum(int); template<int> struct A { int X[Sum(2)]; void foo() { sizeof(X); } }; void bar() { A<0> a; a.foo(); } ================================== The code is invalid, since the array size "Sum(2)" is not a constant. Even the definition inline int Sum(unsigned int n) { return n*(n+1)/2; } from the original test case doesn't change this. The ICE was fixed by Mark's patch for PR 18429 http://gcc.gnu.org/ml/gcc-cvs/2004-11/msg00582.html We now (i.e. in gcc 4.0.0) emit a proper error message. Closing, since this is not a regression. -- What |Removed |Added ---------------------------------------------------------------------------- CC| |reichelt at gcc dot gnu dot | |org Status|UNCONFIRMED |RESOLVED Keywords| |ice-on-invalid-code Resolution| |FIXED Summary|internal error |ICE on non-constant array | |size in template Target Milestone|--- |4.0.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20032