[lex.pptoken]
Изменение: новые виды строковых литералов.
Обоснование: требуется для новых функций.
Влияние на исходную функцию:
действительный код C ++ 2003 может не компилироваться или давать другие результаты в соответствии с этим международным стандартом. В частности, макросы по имени R, u8,
u8R, u, uR, U, UR, или LR не будут расширены , когда рядом с строковым литералом , но будет интерпретироваться как часть строки литерала. Например,
#define u8 "abc"
const char* s = u8"def"; // Previously "abcdef", now "def"
[lex.pptoken]
Изменение: поддержка определяемых пользователем буквальных строк.
Обоснование: требуется для новых функций.
Влияние на исходную функцию:
действительный код C ++ 2003 может не скомпилировать или привести к другим результатам в соответствии с этим международным стандартом, как показано в следующем примере.
#define _x "there"
"hello"_x // #1
Раньше # 1 состоял бы из двух отдельных токенов предварительной обработки, и макрос _x был бы расширен. В этом международном стандарте № 1 состоит из одного токена предварительной обработки, поэтому макрос не раскрывается.
[lex.key]
Изменение: новые ключевые слова.
Обоснование: требуется для новых функций.
Влияние на оригинальной функции:
Добавлена в таблице 5, следующие идентификаторы новых ключевых слов:
alignas,
alignof,
char16_t,
char32_t,
constexpr,
decltype,
noexcept,
nullptr,
static_assert, и
thread_local. Допустимый код C ++ 2003, использующий эти идентификаторы, недопустим в этом международном стандарте.
[lex.icon]
Изменение: Тип целочисленных литералов.
Обоснование: совместимость с C99.
Влияние на исходную функцию:
некоторые целочисленные литералы, размер которых больше, чем может быть представлен, long могут измениться с целочисленного типа без знака на signed long long.