My understanding of that issue is simply that they are taking advantage of the rule that causes \r\n  (for example) to be folded to a single ‘newline’ character, and defining their ‘newline’ character to be “any amount of spaces, followed by \n”.


First, I severely doubt this was the intent of the wording, I presume the wording itself intended to simply handle multi-character newline representations, though presumably of ‘fixed width’ (meaning, WG14 had a handful of 2 byte representations in mind).


I don’t think the rest of your question follows.



From: Core <> On Behalf Of Corentin via Core
Sent: Thursday, May 28, 2020 5:50 AM
To: C++ Core Language Working Group <>
Cc: Corentin <>; SG16 <>; Alisdair Meredith <>
Subject: [isocpp-core] To which extent characters can be replaced or removed in phase 1?




This GCC issue argues that it is valid

for an implementation to remove trailing whitespaces as part of the implementation defined mapping described in translation phase 1. [lex.phases]


Is it the intent of that wording?

Should it be specified that this implementation defined mapping should preserve the semantic of each abstract character present in the physical source file?

If not, is it a valid implementation to perform arbitrary text transformation in phase 1 such as replacing "private" by "public" or replacing all "e" by a "z" ?







For reference here is the definition of abstract character in Unicode 13


Abstract character: A unit of information used for the organization, control, or representation of textual data.
• When representing data, the nature of that data is generally symbolic as
opposed to some other kind of data (for example, aural or visual). Examples of
such symbolic data include letters, ideographs, digits, punctuation, technical
symbols, and dingbats.
• An abstract character has no concrete form and should not be confused with a
• An abstract character does not necessarily correspond to what a user thinks of
as a “character” and should not be confused with a grapheme.
• The abstract characters encoded by the Unicode Standard are known as Unicode abstract characters.
• Abstract characters not directly encoded by the Unicode Standard can often be
represented by the use of combining character sequences.