[diff.cpp20.lex]

# Annex C (informative) Compatibility [[diff]](./#diff)

## C.2 C++ and ISO C++ 2020 [[diff.cpp20]](diff.cpp20#lex)

### C.2.2 [[lex]](lex "5 Lexical conventions"): lexical conventions [diff.cpp20.lex]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L470)

**Affected subclause:** [[lex.name]](lex.name)  


**Change:** Previously valid identifiers containing characters
not present in UAX #44 properties XID_Start or XID_Continue, or
not in Normalization Form C, are now rejected[.](#1.sentence-1)

  


**Rationale:** Prevent confusing characters in identifiers[.](#1.sentence-2)

Requiring normalization of names ensures consistent linker behavior[.](#1.sentence-3)

  


**Effect on original feature:** Some identifiers are no longer well-formed[.](#1.sentence-4)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L483)

**Affected subclause:** [[lex.string]](lex.string)  


**Change:** Concatenated [*string-literal*](lex.string#nt:string-literal "5.13.5 String literals [lex.string]")*s* can no longer have
conflicting [*encoding-prefix*](lex.ccon#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]")es[.](#2.sentence-1)

  


**Rationale:** Removal of unimplemented conditionally-supported feature[.](#2.sentence-2)

  


**Effect on original feature:** Concatenation of [*string-literal*](lex.string#nt:string-literal "5.13.5 String literals [lex.string]")*s* with different [*encoding-prefix*](lex.ccon#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]")es
is now ill-formed[.](#2.sentence-3)

[*Example [1](#example-1)*: auto c = L"a" U"b"; // was conditionally-supported; now ill-formed â *end example*]
