[diff.cpp11.lex]

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

## C.5 C++ and ISO C++ 2011 [[diff.cpp11]](diff.cpp11#lex)

### C.5.2 [[lex]](lex "5 Lexical conventions"): lexical conventions [diff.cpp11.lex]

[1](#1)

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

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


**Change:** [*pp-number*](lex.ppnumber#nt:pp-number "5.7 Preprocessing numbers [lex.ppnumber]") can contain one or more single quotes[.](#1.sentence-1)

  


**Rationale:** Necessary to enable single quotes as digit separators[.](#1.sentence-2)

  


**Effect on original feature:** Valid C++ 2011 code may fail to compile or may change meaning in this
revision of C++[.](#1.sentence-3)

For example, the following code is valid both in C++ 2011 and in
this revision of C++, but the macro invocation produces different outcomes
because the single quotes delimit a [*character-literal*](lex.ccon#nt:character-literal "5.13.3 Character literals [lex.ccon]") in C++ 2011, whereas they are digit
separators in this revision of C++[.](#1.sentence-4)

[*Example [1](#example-1)*: #define M(x, ...) __VA_ARGS__int x[2] = { M(1'2,3'4, 5) };// int x[2] = { 5 };  --- C++ 2011// int x[2] = { 3'4, 5 }; --- this revision of C++ â *end example*]
