c++/8778: ICE on illegal initialization of non-integral static in-class constant

Wolfgang Bangerth bangerth@ticam.utexas.edu
Mon Dec 2 16:26:00 GMT 2002


The following reply was made to PR c++/8778; it has been noted by GNATS.

From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: Volker Reichelt <reichelt@igpm.rwth-aachen.de>
Cc: gcc-gnats@gcc.gnu.org, <gcc-bugs@gcc.gnu.org>, <sgunderson@bigfoot.com>
Subject: Re: c++/8778: ICE on illegal initialization of non-integral static
 in-class constant
Date: Mon, 2 Dec 2002 18:19:36 -0600 (CST)

 > I don't quite agree with Wolfgangs analysis.
 
 :-)
 
 > Initializing const arrays is usually supported by gcc.
 
 True, but not as static member variables.
 
 > In fact, the code compiles if you just leave out the curly
 > braces around the initializer.
 > 
 > So the ICE is neither caused by the array initializer nor by the
 > infinite recursion (which might also come to mind as a compiler crasher)
 > as the following example shows:
 > 
 > --------------------snip here----------------------
 > template <int n> struct A
 > {
 >     static const int i = A<0>::i;     // works
 >     static const int i = { A<0>::i }; // ICE
 >     static const int i = { 1 };       // works
 > };
 > --------------------snip here----------------------
 
 Your analysis gives a clue as to what goes wrong in the compiler, but note 
 that the original code reads
        const static int result[] = { mylist<n-1>::result };
                              ^^^^
 This is what makes it illegal, not the curly braces. In your example, you 
 are initializing a scalar, he is initializing an array/pointer. However, 
 the curly braces seem to be the reason for the ICE, as you point out.
 
 But thanks for the analysis anyway, it will help those that actually fix 
 the problem :-)
 
 W.
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth              email:           bangerth@ticam.utexas.edu
                                www: http://www.ticam.utexas.edu/~bangerth
 
 



More information about the Gcc-prs mailing list