[istream::sentry],
[ostream::sentry],
Изменение: Укажите использование в существующем логические функции преобразования.
Обоснование: прояснить намерения, избегать обходных путей.
Влияние на исходную функцию:
действительный код C ++ 2003, основанный на неявных логических преобразованиях, не будет компилироваться с этим международным стандартом. Такие преобразования происходят в следующих условиях:[iostate.flags]
explicit
передача значения функции, которая принимает аргумент типа bool;
использование operator== для сравнения с false или true;
возврат значения из функции с типом возврата bool;
инициализация членов типа bool через агрегатную инициализацию;
инициализация, const bool& которая привязывается к временному.
[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
}