__LINE__
?Authors: Jens Gustedt
Date: 2025-06-18
Submitted against: C23
Status: Review
The introduction of digit separators in C23 seems to have overlooked
the case of the __LINE__
macro. The current text would allow them.
If it is possible that such digit separators occur the following code could have expansions that are invalid in compilation phase 7:
#define UNIQ_(L, ...) __VA_ARGS__ ## L
#define UNIQ(...) UNIQ_(__LINE__, __VA_ARGS__)
int UNIQ(special) = 78; callit(UNIQ(special));
In general in all implementations that I am aware of the last line would expand to something like:
int special50138 = 78; callit(special50138);
If the expansion would contain digit separators that would be
int special50'138 = 78; callit(special50'138);
which would be invalid in phase 7.
Forbid the use of digit separators in the expansion of __LINE__
.
Change the corresponding item in "6.10.10.2 Mandatory macros":
__LINE__
The presumed line number (within the current source file) of the current source line (an integer literal not containing digit separators).216)
Comment from Issues list maintainer on 2025-09-01:
At the August 2025 (Brno) meeting of WG14, the suggested correction was accepted, subject to review at the next meeting.
An editorial request was made to change "not containing digit separators" to "excluding any digit separators" for consistency with wording already in the standard.
Change the corresponding item in "6.10.10.2 Mandatory macros":
__LINE__
The presumed line number (within the current source file) of the current source line (an integer literal excluding any digit separators).216)