29 Input/output library [input.output]

29.7 Formatting and manipulators [iostream.format]

29.7.5 Output streams [output.streams] Class template basic_­ostream [ostream] 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; }; }
The class sentry defines a class that is responsible for doing exception safe prefix and suffix operations.
explicit sentry(basic_ostream<charT, traits>& os);
If os.good() is nonzero, prepares for formatted or unformatted output.
If os.tie() is not a null pointer, calls os.tie()->flush().317
If, after any preparation is completed, os.good() is true, ok_­ == true otherwise, ok_­ == false.
During preparation, the constructor may call setstate(failbit) (which may throw ios_­base​::​​failure ([iostate.flags])).318
If (os.flags() & ios_­base​::​unitbuf) && !uncaught_­exceptions() && os.good() is true, calls os.rdbuf()->pubsync().
If that function returns -1, sets badbit in os.rdstate() without propagating an exception.
explicit operator bool() const;
Effects: Returns ok_­.
The call os.tie()->flush() does not necessarily occur if the function can determine that no synchronization is necessary.
The sentry constructor and destructor can also perform additional implementation-dependent operations.