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]
Other format: [Raw text]

Re: ISO C++ forbids initialization in array new?


On 8/19/05, Jonathan Wakely <cow@compsoc.man.ac.uk> wrote:
> WU Yongwei wrote:
> > Well, I see this in the gcc error message.  Can someone here kindly
> > point to me which part of the Standard specified this behaviour?  I
> > thought it should be in 5.3.4, but was not able to find the words
> > there.
[snipped]
> This is OK, and default initialises the array, which default initialises
> each element (8.5/5)
> 
>    int* i = new int[5]();
> 
> but this is not OK:
> 
>    int* i = new int[5](23);
> 
> because it is not valid to initialise an array like this:
> 
>    typedef int (five_ints)[5];
>    five_ints i(23);
> 
> this gives:
> 
> array_init.cc:8: error: cannot initialize arrays using this syntax

This sounds reasonable.  The only problem is that it does not
constitute proof.  It is complete OK if the standard disallowed `int
a[5](23)' while allowing `new int[5](23)', just as older GCC did.

On 8/19/05, Alisdair Meredith <alisdair.meredith@uk.renaultf1.com> wrote:
> WU Yongwei wrote:
> 
> > Well, I see this in the gcc error message.  Can someone here kindly
> > point to me which part of the Standard specified this behaviour?  I
> > thought it should be in 5.3.4, but was not able to find the words
> > there.
> >
> > By the way, anyone knows the rationale of this behaviour?
> 
> It is not explicitly forbidden. Rather, there is no syntax defined that
> would enable it (so it is implicitly forbidden)

My observations.  According to 5.3.4, an expression like `new
int[5](23)' is well-formed.  Just that no semantics are formally
defined for it.

The behaviour might be OK, but the message seems a little misleading. 
Would something like `cannot specify initializer for arrays' be better
since it really has little to do with `array new'?

Also, the trends of gcc removing existing `extensions' are a little
worrisome.  IMHO, the extension should be allowed and a warning in the
case of `-W' or `-ansi' should be issued.

Best regards,

Yongwei


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