Annex C (informative) Compatibility [diff]

C.2 C++ and ISO C++ 2003 [diff.cpp03]

C.2.16 Clause [input.output]: input/output library [diff.cpp03.input.output]

[istream::sentry], [ostream::sentry], Изменение: Укажите использование в существующем логические функции преобразования. Обоснование: прояснить намерения, избегать обходных путей. Влияние на исходную функцию: действительный код C ++ 2003, основанный на неявных логических преобразованиях, не будет компилироваться с этим международным стандартом. Такие преобразования происходят в следующих условиях:[iostate.flags]
explicit

[ios::failure]
Изменение: изменить базовый класс std​::​ios_­base​::​failure.
Обоснование: более подробные сообщения об ошибках.
Влияние на исходный элемент: std​::​ios_­base​::​failure больше не является производным от std​::​exception, а является производным от std​::​system_­error, который, в свою очередь, является производным от std​::​runtime_­error. Допустимый код C ++ 2003, предполагающий, что он std​::​ios_­base​::​failure является производным напрямую, std​::​exception в этом международном стандарте может выполняться иначе.

[ios.base]
Изменение: типы флагов в std​::​ios_­base теперь являются битовыми масками со значениями, определенными как статические члены constexpr.
Обоснование: требуется для новых функций.
Влияние на исходную функцию: действительный код C ++ 2003, который полагается на std​::​ios_­base типы флагов, представленные std​::​bitset как целочисленный тип или как целочисленный, может не скомпилировать с этим международным стандартом. Например:

#include <iostream>

int main() {
  int flag = std::ios_base::hex;
  std::cout.setf(flag);         // error: setf does not take argument of type int
}