8/19/05, Jonathan Wakely <cow (AT) compsoc (DOT) man.ac.ukwrote:
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 K, and default initialises the array, which default initialises
each element (8.5/5)
int* i = new int[5]();
but this is not K:
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 K if the standard disallowed `int
a[5](23)' while allowing `new int[5](23)', just as older GCC did.
8/19/05, Alisdair Meredith <alisdair.meredith (AT) uk (DOT) renaultf1.comwrote:
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 K, 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. IMH, the extension should be allowed and a warning in the
case of `-W' or `-ansi' should be issued.
Best regards,
Yongwei