Skip to content

CWG2818 [lex.name] Standard and implementation-defined uses of reserved identifiers should be well-formed #226

@frederick-vs-ja

Description

@frederick-vs-ja

Full name of submitter (unless configured in github; will be published with the issue): Jiang An

Reference (section label): [lex.name]

Link to reflector thread (if any): cplusplus/draft#5187, cplusplus/draft#5296

Issue description: There are many reserved identifiers that are of name patterns in [lex.name]/3 but intended to be used by a program, such predefined macros ([cpp.predefined]) and library feature-test macros ([version.syn]). However, [lex.name]/3 seemly makes use of them ill-formed, no diagnostic required.
Implementations also generally provide their own predefined macros with reserved names, or say that some components can be configured by program-provided macros with reserved names.

Perhaps we should clarify that the intentional uses are not IFNDR.

Suggested resolution:
Modify [lex.name]/3 as indicated:

In addition, some identifiers are reserved for use by C++ implementations. and shall not be used otherwise; no diagnostic is required.

Add a paragraph after [lex.name]/3:

This document requires some of these reserved identifiers and defines their permissible uses. An implementation may also define permissible uses of some of these reserved identifiers. Unless otherwise stated, if a use of such a reserved identifer is neither mentioned in this document nor an implementation-defined permissible use, the program is ill-formed, no diagnostic required.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions