std::basic_ostream<CharT,Traits>::sentry

From cppreference.com
< cpp‎ | io‎ | basic ostream
class sentry;

An object of class basic_ostream::sentry is constructed in local scope at the beginning of each member function of std::basic_ostream

Member functions

(constructor)
constructs the sentry object. All the preparation tasks are done here
(public member function)
(destructor)
finalizes the stream object after formatted output or after exception, if necessary
(public member function)
operator=
the assignment operator is deleted
(public member function)
operator bool
checks if the preparation of the stream object was successful
(public member function)

std::basic_ostream::sentry::sentry

explicit sentry( std::basic_ostream <CharT, Traits> & os ) ;

Prepares the stream for formatted output.

If os.good() is false, returns. Otherwise, if os.tie() is not a null pointer, calls os.tie()->flush() to synchronize the output sequence with external streams. During preparation, the constructor may call setstate(failbit) (which may throw std::ios_base::failure

If after preparation is completed, os.good() == true, then any subsequent calls to operator bool will return true

Parameters

os - output stream to prepare

Exceptions

std::ios_base::failure if the end of file condition occurs.


std::basic_ostream::sentry::~sentry

~sentry();

If (os.flags ( ) & std::ios_base::unitbuf ) && ! std::uncaught_exception ( ) && os.good ( ) ) is true, calls os.rdbuf()->pubsync() . If that function returns -1, sets badbit in os.rdstate()


std::basic_ostream::sentry::operator bool

explicit operator bool() const;

Checks whether the preparation of the output stream was successful.

Parameters

(none)

Return value

true if the preparation of the output stream was successful, false

Example

#include <iostream>
#include <sstream>
 
struct Foo
{
    char n[6];
};
 
std::ostream& operator<<(std::ostream& os, Foo& f)
{
    std::ostream::sentry s(os);
    if (s)
        os.write(f.n, 5);
    return os;
}
 
int main()
{
    Foo f = {"abcde"};
    std::cout << f << '\n';
}

Output:

abcde

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 397 C++98 the destructor might call os.flush(), which may throw exceptions the exception is not propagated
LWG 442 C++98 operator bool was not declared const (it is const in the synopsis added const
LWG 835 C++98 if os sets unitbuf, the destructor would call os.flush(), which
is an UnformattedOutputFunction and creates another sentry object
calls
os.rdbuf()->pubsync()

See also

inserts formatted data
(public member function)