A, B, or C is not ambiguous, it means A or B or C.
A, B, and C is not ambiguous either, it means A and B and C.

See also the ISO House Style.

void declarator ; you are referring to https://eel.is/c++draft/dcl.fct.def.general#2 , right? Pay attention to the font: void is set in code font, and the ";" is set in code font, too, while `declarator` is in italics. What this means is: the keyword `void`, followed by the grammar production declarator (grammar terms are set in italics), followed by a semicolon.

ISO standards are very rarely ambiguous (and if they are that's a defect), but you have to be familiar with the conventions in order to read it correctly.

Cheers,
Timur

On 7 Dec 2022, at 16:59, Vladimir Grigoriev via Std-Discussion <std-discussion@lists.isocpp.org> wrote:

Well, consider another phrase from the C++ Standard
 
«2 In a function-definition, either void declarator ; or declarator ; shall be a well-formed function declaration ...»
 
What is the «void declarator»? I have not found the definition of this term.  It seems these word combination is encountered only once in the C++ Standard.
 
With best regards
(Vlad from Moscow)
 
 
 
 
Среда, 7 декабря 2022, 14:53 +03:00 от Daniel Krügler <daniel.kruegler@gmail.com>:
 
Am Mi., 7. Dez. 2022 um 12:21 Uhr schrieb Vladimir Grigoriev via
Std-Discussion <std-discussion@lists.isocpp.org>:
>
> The main problem of the C+ Standard is that some definitions can be interpreted in differenct ways.

Is that really a specific problem of the C++ standard or just a
problem of every natural language?

> Consider for example the following quote from the C++ Standard
>
> 1 A trivially copyable class is a class: (1.1) — that has at least one eligible copy constructor, move constructor, copy assignment operator, or move assignment operator
>
> The phrase can be interpreted for example like
>
> 1 A trivially copyable class is a class: (1.1) — that has at least one eligible copy constructor, or one eligible move constructor, or one eligible copy assignment operator, or one eligible move assignment operator
>
> or like
>
> 1 A trivially copyable class is a class: (1.1) — that has at least one eligible copy constructor, and at least one eligible move constructor, and at least one eligible copy assignment operator, or move assignment operator
>
> As you can see the definition can be interpreted differently.
>
> How should the definition be interpreted?

My understanding of the Oxford comma rules
(https://en.wikipedia.org/wiki/Serial_comma) is that in such a list
each item is combined with the "or"/"and" at the very last end to
signal the combination operator between the individual items, which
would correspond to your first interpretation.

Thanks,

- Daniel
 
--
Std-Discussion mailing list
Std-Discussion@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-discussion