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

4443. Clean up identifier comparisons in meta::define_aggregate

Section: 21.4.16 [meta.reflection.define.aggregate] Status: Immediate Submitter: Tomasz Kamiński Opened: 2025-11-04 Last modified: 2025-11-04

Priority: Not Prioritized

View other active issues in [meta.reflection.define.aggregate].

View all other issues in [meta.reflection.define.aggregate].

View all issues with Immediate status.

Discussion:

Addresses US 127-190

NK is defined as an identifier (see 11.4.1) and should not be compared with code or with string literals in bullet 8.4. Similarly, 9.5.1 should not talk about “character sequence encoded by NK

[Kona 2025-11-04; approved by LWG. Status changed: New → Immediate.]

Proposed resolution:

This wording is relative to N5014.

  1. Modify 21.4.16 [meta.reflection.define.aggregate] as indicated:

    template<reflection_range R = initializer_list<info>>
      consteval info define_aggregate(info class_type, R&& mdescrs);
    

    -7- […]

    -8- Constant When:

    • -8.1- […]
    • -8.2- […]
    • -8.3- […]
    • -8.4- for every pair (rK, rL) where K<L, if NK is not ⊥ and NL is not ⊥, then either:
      • -8.4.1- NK != NL is true NK is not the same identifier as NL or
      • -8.4.2- NK == u8"_" is true NK is the identifier _ (u+005f low line).

    -9- Effects: Produces an injected declaration D (7.7 [expr.const]) that defines C and has properties as follows:

    • -9.1- […]
    • -9.2- […]
    • -9.3- […]
    • -9.4- […]
    • -9.5- for every rK, there is corresponding entity MK belonging to the class scope of D with the following properties: K<L, if NK is not ⊥ and NL is not ⊥, then either:
      • -9.5.1- if NK is ⊥, MK is an unnamed bit-field. Otherwise, MK is a non-static data member whose name is the identifier determined by the character sequence encoded by NK in UTF-8.
      • -9.5.2- […]
      • -9.5.3- […]
      • -9.5.4- […]
      • -9.5.5- […]
    • -9.6- […]