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.