[lex.pptoken]
Change: New kinds of string literals.
Rationale: Required for new features.
Effect on original feature:
Valid C++ 2003 code may fail to compile or produce different results in
this International Standard. Specifically, macros named R, u8,
u8R, u, uR, U, UR, or LR will
not be expanded when adjacent to a string literal but will be interpreted as
part of the string literal. For example,
#define u8 "abc"
const char* s = u8"def"; // Previously "abcdef", now "def"
[lex.pptoken]
Change: User-defined literal string support.
Rationale: Required for new features.
Effect on original feature:
Valid C++ 2003 code may fail to compile or produce different results in
this International Standard, as the following example illustrates.
#define _x "there"
"hello"_x // #1
Previously, #1 would have consisted of two separate preprocessing tokens and the macro _x would have been expanded. In this International Standard, #1 consists of a single preprocessing token, so the macro is not expanded.
[lex.key]
Change: New keywords.
Rationale: Required for new features.
Effect on original feature:
Added to Table 5, the following identifiers are new keywords:
alignas,
alignof,
char16_t,
char32_t,
constexpr,
decltype,
noexcept,
nullptr,
static_assert,
and
thread_local.
Valid C++ 2003 code using these identifiers is invalid in this International
Standard.
[lex.icon]
Change: Type of integer literals.
Rationale: C99 compatibility.
Effect on original feature:
Certain integer literals larger than can be represented by long could
change from an unsigned integer type to signed long long.