Section: 188.8.131.52.3 [macro.names] Status: C++20 Submitter: Casey Carter Opened: 2018-08-01 Last modified: 2021-02-25 10:48:01 UTC
View all other issues in [macro.names].
View all issues with C++20 status.
184.108.40.206.3 [macro.names]/2 forbids a translation unit to define names "lexically identical to […] the attribute-tokens described in 9.12 [dcl.attr]." We recently added the attribute-tokens likely and unlikely (9.12.7 [dcl.attr.likelihood]). These names are in extremely wide use as function-like macros in the open source community, forbidding users to define them breaks large amounts of code. (Reportedly Chromium contains 19 definitions each of "likely" and "unlikely" as function-like macros.)Indeed, this issue came up during EWG discussion of P0479R1 "Attributes for Likely and Unlikely Statements" in Kona, and EWG decided to keep the names "likely" and "unlikely" for the attribute tokens since the usage wouldn't conflict with defining them as function-like macros. 220.127.116.11.3 [macro.names]/2 should not break large amounts of existing code that doesn't actually conflict with the use of the [[likely]] and [[unlikely]] attributes.
[2018-08-20 Status to Tentatively Ready after five positive votes on the reflector.]
[2018-11, Adopted in San Diego]
This wording is relative to N4762.
Change 18.104.22.168.3 [macro.names] as indicated:
[Drafting Note: If both this proposed resolution and the proposed resolution of LWG 3132 are accepted, the text inserted by LWG 3132 should precede the text added here.]
-2- A translation unit shall not #define or #undef names lexically identical to keywords, to the identifiers listed in Table 4, or to the attribute-tokens described in 9.12 [dcl.attr].