30 Input/output library [input.output]

30.7 Formatting and manipulators [iostream.format]

30.7.5 Output streams [output.streams]

30.7.5.1 Class template basic_­ostream [ostream]

30.7.5.1.3 Class basic_­ostream​::​sentry [ostream::sentry]

namespace std {
  template <class charT, class traits = char_traits<charT>>
  class basic_ostream<charT, traits>::sentry {
    bool ok_; // exposition only
  public:
    explicit sentry(basic_ostream<charT, traits>& os);
    ~sentry();
    explicit operator bool() const { return ok_; }

    sentry(const sentry&) = delete;
    sentry& operator=(const sentry&) = delete;
  };
}

Этот класс sentry определяет класс, который отвечает за выполнение безопасных в отношении исключений операций с префиксом и суффиксом.

explicit sentry(basic_ostream<charT, traits>& os);

Если не os.good() равно нулю, готовится к форматированному или неформатированному выводу. Если os.tie() не является нулевым указателем, вызывает os.tie()->flush().318

Если после любой препарат будет завершен, os.good() это true, вok_­ == true противном случае ok_­ == false. Во время подготовки конструктор может вызвать setstate(failbit) (который может throw ios_­base​::​​failure ([iostate.flags]))319

~sentry();

Если (os.flags() & ios_­base​::​unitbuf) && !uncaught_­exceptions() && os.good() есть true, звонит os.rdbuf()->pubsync(). Если эта функция возвращает -1, устанавливает badbit в os.rdstate() без распространяющегося исключения.

explicit operator bool() const;

Effects: Возврат ok_­.

Вызов os.tie()->flush() не обязательно происходит, если функция может определить, что синхронизация не требуется.

sentry Конструктор и деструктор может также выполнять дополнительные операции , зависящие от реализации.