On 8/19/05, Jonathan Wakely <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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