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() это 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;
Вызов os.tie()->flush() не обязательно происходит, если функция может определить, что синхронизация не требуется.
sentry Конструктор и деструктор может также выполнять дополнительные операции , зависящие от реализации.