https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67981

Casey Carter <Casey at Carter dot net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |Casey at Carter dot net

--- Comment #1 from Casey Carter <Casey at Carter dot net> ---
I think this is a bug in the standard, and not a bug in GCC.
noptr-new-declarator has two grammar productions:

noptr-new-declarator:
  [ expression ] attribute-specifier-seq_opt
  noptr-new-declarator [ constant-expression ] attribute-specifier-seq_opt

with the intent being that all but the first dimension in a multi-dimensional
array new expression must be constant expressions, while the first dimension
can be a non-constant expression. It would be peculiar if "new int[0]" were to
be ill-formed whereas "int n = 0; new int[n];" were to be well-formed, which it
very clearly is by 5.3.4/7: "... When the value of the expression is zero, the
allocation function is called to allocate an array with no elements."

The confusion arises here because the wording uses "constant-expression" to
describe occurrences of the second grammar production of noptr-new-declarator,
and "expression" to describe occurrences of the first production, which is
ambiguous when the expression also happens to be a constant-expression.

Reply via email to