This is the mail archive of the gcc-bugs@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]
Other format: [Raw text]

Re: c++/8778: ICE on illegal initialization of non-integral staticin-class constant


> 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



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