This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++23 status.

3753. Clarify entity vs. freestanding entity

Section: 16.3.3.7 [freestanding.item] Status: C++23 Submitter: Ben Craig Opened: 2022-08-23 Last modified: 2023-11-22

Priority: 2

View all other issues in [freestanding.item].

View all issues with C++23 status.

Discussion:

This addresses NB comment GB-075 ( [freeestanding.entity] "Freestanding entities" are not entities)

[freestanding.entity] p1 defines a freestanding entity as a declaration or macro definition.

[freestanding.entity] p3 then says "entities followed with a comment […] are freestanding entities".

This is inconsistent, and breaks with macros, because macros are not entities, but they can be freestanding entities.

[2022-09-23; Reflector poll]

Set priority to 2 after reflector poll.

It's confusing for "freestanding entities" to be two things, neither of which are entities. Declarations may declare entities, they are not entities themselves. Given this definition, p6/7/8 makes no sense. A namespace can't be a freestanding entity since it's neither a declaration nor a macro definition.

"freestanding entities" is not best name, given the collision with core entity, but I think that this is separable issue.

[2022-09-28; Reflector poll]

Set status to Tentatively Ready after five votes in favour during reflector poll.

Previous resolution [SUPERSEDED]:

This wording is relative to the forthcoming C++23 CD.

[2022-11-06; Ben Craig provides new wording]

[2022-11-07; Kona - move to open]

New proposed resolution to be added.

Previous resolution [SUPERSEDED]:

This wording is relative to N4917.

  1. Modify [freestanding.entity] as indicated:

    [Drafting note: Replace the section name [freestanding.entity] by [freestanding.item] throughout the working draft]

    16.3.3.6 Freestanding entities [freestanding.entity]

    -1- A freestanding entity is a declaration or macro definition that is present in a freestanding implementation and a hosted implementation.

    -2- Unless otherwise specified, the requirements on freestanding entities on a freestanding implementation are the same as the corresponding requirements in a hosted implementation.

    -3- In a header synopsis, entities followed with a comment that includes freestanding are freestanding entities.

    […]

    -4- If a header synopsis begins with a comment that includes all freestanding, then all of the declarations and macro definitions in the header synopsis are freestanding entities.

    […]

    -5- Deduction guides for freestanding entity class templates are freestanding entities.

    -6- Enclosing namespaces of freestanding entities are freestanding entities.

    -7- Friends of freestanding entities are freestanding entities.

    -8- Entities denoted by freestanding entity typedef-names and freestanding entity alias templates are freestanding entities.

  2. Modify 16.4.2.5 [compliance] as indicated:

    -3- For each of the headers listed in Table 28, a freestanding implementation provides at least the freestanding entities ( [freestanding.entity]) declared in the header.

  3. Modify 22.10.15.5 [func.bind.place] as indicated:

    -3- Placeholders are freestanding entities ( [freestanding.entity]).

[2022-11-08; Ben Craig provides improved wording]

This combined resolution addresses both 3753 and LWG 3815(i), and has already been reviewed by LWG.

This resolves ballot comment GB-75. It also partially addresses GB-130 (along with LWG 3814(i)).

Previous resolution [SUPERSEDED]:

This wording is relative to N4917.

  1. Modify 16.3.3.6 [freestanding.entity] as indicated:

    [Drafting note: Replace the section name [freestanding.entity] by [freestanding.item] throughout the working draft]

    16.3.3.6 Freestanding entities [freestanding.entity]

    -1- A freestanding entity is a declaration or macro definition that is present in a freestanding implementation and a hosted implementation.

    -2- Unless otherwise specified, the requirements on freestanding entities on a freestanding implementation are the same as the corresponding requirements in a hosted implementation.

    -3- In a header synopsis, entities followed with a comment that includes freestanding are freestanding entities.

    […]

    -4- If a header synopsis begins with a comment that includes all freestanding, then all of the declarations and macro definitions in the header synopsis are freestanding entities.

    […]

    -5- Deduction guides for freestanding entity class templates are freestanding entities.

    -6- Enclosing namespaces of freestanding entities are freestanding entities.

    -7- Friends of freestanding entities are freestanding entities.

    -8- Entities denoted by freestanding entity typedef-names and freestanding entity alias templates are freestanding entities.

  2. Modify 16.4.2.5 [compliance] as indicated:

    -3- For each of the headers listed in Table 28, a freestanding implementation provides at least the freestanding entities (16.3.3.6 [freestanding.entity]) declared in the header.

  3. Modify 22.10.15.5 [func.bind.place] as indicated:

    -3- Placeholders are freestanding entities (16.3.3.6 [freestanding.entity]).

[2022-11-09; Ben Craig and Tomasz provide improved wording]

This new resolution merges definition of freestanding item for entity in macro into bullet lists. It still addresses both 3753 and LWG 3815(i).

This resolves ballot comment GB-75. It also partially addresses GB-130 (along with LWG 3814(i)).

Previous resolution [SUPERSEDED]:

This wording is relative to N4917.

  1. Modify [freestanding.entity] as indicated:

    [Drafting note: Replace the section name [freestanding.entity] by [freestanding.item] throughout the working draft]

    16.3.3.6 Freestanding entities [freestanding.entity]

    -1- A freestanding entity is a declaration or macro definition that is present in a freestanding implementation and a hosted implementation.

    -2- Unless otherwise specified, the requirements on freestanding entities on a freestanding implementation are the same as the corresponding requirements in a hosted implementation.

    -3- In a header synopsis, entities followed with a comment that includes freestanding are freestanding entities.

    [Example 1: … — end example]

    -4- If a header synopsis begins with a comment that includes all freestanding, then all of the declarations and macro definitions in the header synopsis are freestanding entities..

    [Example 2: … — end example]

    -5- Deduction guides for freestanding entity class templates are freestanding entities.

    -6- Enclosing namespaces of freestanding entities are freestanding entities.

    -7- Friends of freestanding entities are freestanding entities.

    -8- Entities denoted by freestanding entity typedef-names and freestanding entity alias templates are freestanding entities.

  2. Modify 16.4.2.5 [compliance] as indicated:

    -3- For each of the headers listed in Table 28, a freestanding implementation provides at least the freestanding entities (16.3.3.6 [freestanding.entity]) declared in the header.

  3. Modify 22.10.15.5 [func.bind.place] as indicated:

    -3- Placeholders are freestanding entities (16.3.3.6 [freestanding.entity]).

[2022-11-10; Tomasz provide improved wording]

Updated wording to support freestanding typedef-names and using declaration that are not entities. It still addresses both 3753 and LWG 3815(i).

This resolves ballot comment GB-75. It also partially addresses GB-130 (along with LWG 3814(i)).

[Kona 2022-11-10; Move to Immediate]

[2022-11-12 Approved at November 2022 meeting in Kona. Status changed: Immediate → WP.]

Proposed resolution:

This wording is relative to N4917.

  1. Modify [freestanding.entity] as indicated:

    [Drafting note: Replace the section name [freestanding.entity] by [freestanding.item] throughout the working draft]

    16.3.3.6 Freestanding entities [freestanding.entity]

    -1- A freestanding entity is a declaration or macro definition that is present in a freestanding implementation and a hosted implementation.

    -2- Unless otherwise specified, the requirements on freestanding entities on a freestanding implementation are the same as the corresponding requirements in a hosted implementation.

    -3- In a header synopsis, entities followed with a comment that includes freestanding are freestanding entities.

    [Example 1: … — end example]

    -4- If a header synopsis begins with a comment that includes all freestanding, then all of the declarations and macro definitions in the header synopsis are freestanding entities..

    [Example 2: … — end example]

    -5- Deduction guides for freestanding entity class templates are freestanding entities.

    -6- Enclosing namespaces of freestanding entities are freestanding entities.

    -7- Friends of freestanding entities are freestanding entities.

    -8- Entities denoted by freestanding entity typedef-names and freestanding entity alias templates are freestanding entities.

  2. Modify 16.4.2.5 [compliance] as indicated:

    -3- For each of the headers listed in Table 28, a freestanding implementation provides at least the freestanding entities (16.3.3.6 [freestanding.entity]) declared in the header.

  3. Modify 22.10.15.5 [func.bind.place] as indicated:

    -3- Placeholders are freestanding entities (16.3.3.6 [freestanding.entity]).