C++ Logo

std-discussion

Advanced search

Re: Ambiguities of the C++ Standard definitions.

From: Timur Doumler <cpp_at_[hidden]>
Date: Wed, 7 Dec 2022 17:10:15 +0000
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 <https://www.iso.org/ISO-house-style.html>.

void declarator ; you are referring to https://eel.is/c++draft/dcl.fct.def.general#2 <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 <http://eel.is/c++draft/gram.dcl#nt: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_at_[hidden]> 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)
>
>
> You can meet me at http://cpp.forum24.ru/ or www.stackoverflow.com or http://ru.stackoverflow.com
>
>
> Среда, 7 декабря 2022, 14:53 +03:00 от Daniel Krügler <daniel.kruegler_at_[hidden]>:
>
> Am Mi., 7. Dez. 2022 um 12:21 Uhr schrieb Vladimir Grigoriev via
> Std-Discussion <std-discussion_at_[hidden] <x-msg://10/compose?To=std%2ddiscussion_at_[hidden]>>:
> >
> > 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 <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_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-discussion


Received on 2022-12-07 17:10:18