[ostream.sentry] (original) (raw)

31 Input/output library [input.output]

31.7 Formatting and manipulators [iostream.format]

31.7.6 Output streams [output.streams]

31.7.6.2 Class template basic_ostream [ostream]

31.7.6.2.4 Class basic_ostream​::​sentry [ostream.sentry]

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

The classsentrydefines a class that is responsible for doing exception safe prefix and suffix operations.

explicit sentry(basic_ostream& os);

Ifos.good()is nonzero, prepares for formatted or unformatted output.

Ifos.tie()is not a null pointer, callsos.tie()->flush().284

If, after any preparation is completed,os.good()istrue,ok_ == trueotherwise,ok_ == false.

During preparation, the constructor may callsetstate(failbit)(which may throwios_base​::​​failure ([iostate.flags])).285

If(os.flags() & ios_base​::​unitbuf) && !uncaught_exceptions() && os.good()istrue, callsos.rdbuf()->pubsync().

If that function returns , sets badbit inos.rdstate() without propagating an exception.

explicit operator bool() const;

284)284)

The callos.tie()->flush()does not necessarily occur if the function can determine that no synchronization is necessary.

285)285)

Thesentryconstructor and destructor can also perform additionalimplementation-dependent operations.