30 Input/output library [input.output]

30.7 Formatting and manipulators [iostream.format]

30.7.5 Output streams [output.streams]

30.7.5.2 Formatted output functions [ostream.formatted]

30.7.5.2.1 Common requirements [ostream.formatted.reqmts]

Каждая функция форматированного вывода начинает выполнение с создания объекта класса sentry. Если этот объект возвращается true при преобразовании в значение типа bool, функция пытается сгенерировать запрошенный вывод. В случае сбоя генерации выполняется функция форматированного вывода setstate(ios_­base​::​failbit), которая может вызвать исключение. Если во время вывода возникает исключение, то ios​::​badbit включается320 в *thisсостоянии ошибки. Если (exceptions()&badbit) != 0 тогда исключение генерируется повторно. Независимо от того, выбрасывается ли исключение, sentry объект уничтожается до выхода из функции форматированного вывода. Если исключение не генерируется, результатом функции форматированного вывода будет *this.

Описания отдельных функций форматированного вывода описывают, как они выполняют вывод, и не упоминают sentry объект.

Если функция форматированного вывода потока os определяет заполнение, это делается следующим образом. Для данной charT символьной последовательности, seq где charT - символьный тип потока, если длина seq меньше чем os.width(), тоos.fill() к этой последовательности добавляется достаточное количество копий, необходимое для заполнения до ширины os.width() символов. Если (os.flags() & ios_­base​::​adjustfield) == ios_­base​::​left есть true, символы заполнения помещаются после последовательности символов; в противном случае они помещаются перед последовательностью символов.

не вызывая ios​::​failure броска.