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";
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
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
. 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
. 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.