C++ Logo

liaison

Advanced search

Re: [wg14/wg21 liaison] labels

From: Uecker, Martin <Martin.Uecker_at_[hidden]>
Date: Wed, 12 Aug 2020 11:26:22 +0000
Am Dienstag, den 11.08.2020, 17:29 +0200 schrieb Jens Maurer:
> On 11/08/2020 08.37, Uecker, Martin via Liaison wrote:
> >
> > Hi all,
> >
> > I recently proposed changes to the C grammar which got
> > voted into C2X by WG14 (N2508, also see N2496).
> >
> > This allows placing of labels everywhere in a compound
> > statement, even before declarations and at the end
> > of a block, which was not possible in C so far.
> >
> > Example:
> >
> > {
> > start:
> > int i;
> > mid:
> > int j;
> > end:
> > }
> >
> > It has been pointed out to me that while C++ allows
> > labels before declarations, it does not allow them
> > at the end of a compound statement.
> >
> > I plan to propose a change to C++ to make this
> > possible too and I wonder if you have any comments
> > or suggestions related to this?
>
> I'm lukewarm on this. Your example becomes valid C++
> by adding a ";" after the "end:".
>
> So, having the change does not materially alter the
> expressiveness of the common subset of C++ and C.

It would enhance compatibility.

> I'd like to see the wording change for C++ to understand
> whether it's likely low-cost overall to add this.

Ok, no wording yet, but the suggested grammar change would
be as follows (omitting attributes for simplicity):

8.1(1) gets refactored from

statement:
  labeled-statement
  expression-statement
  compound-statement
  selection-statement
  iteration-statement
  jump-statement
  declaration-statement
  try-block

to the following:

statement:
  labeled-statement
  unlabeled-statement
  declaration-statement

unlabeled-statement:
  expression-statement
  compound-statement
  selection-statement
  iteration-statement
  jump-statement
  try-block



8.2(1) gets refactored from

labeled-statement:
  identifier : statement
  case constant-expression : statement
  default : statement

to:

labeled-statement:
  label statement

label:
  identifier :
  case constant-expression :
  default :


In 8.4(1), we then do the actual
change which is changing


compound-statement:
  statement-seq

statement-seq:
 labeled-statement
 statement-seq statement

to

compound-statement:
  statement-seq

statement-seq:
 statement-seq-item
 statement-seq statement-seq-item

statement-seq-item:
 label
 unlabeled-statement
 declaration



Best,
Martin



Received on 2020-08-12 06:29:50