std::ios_base::iostate

From cppreference.com
< cpp‎ | io‎ | ios base
typedef /*implementation defined*/ iostate;
static constexpr iostate goodbit = 0;
static constexpr iostate badbit = /*implementation defined*/

static constexpr iostate failbit = /*implementation defined*/

static constexpr iostate eofbit = /*implementation defined*/

Specifies stream state flags. It is a BitmaskType, the following constants are defined:

Constant Explanation
goodbit no error
badbit irrecoverable stream error
failbit input/output operation failed (formatting or extraction error)
eofbit associated input sequence has reached end-of-file

The eofbit

The eofbit is set by the following standard library functions:

  • The string input function std::getline if it completes by reaching the end of the stream, as opposed to reaching the specified terminating character.
  • The numeric input overloads of basic_istream::operator>> if the end of the stream was encountered while reading the next character, on Stage 2 of num_get::get processing. Depending on the parsing state, failbit may or may not be set at the same time: for example, int n; istringstream buf("1"); buf >> n; sets eofbit, but not failbit: the integer 1 was successfully parsed and stored in n. On the other hand, bool b; istringstream buf("tr"); buf >> boolalpha >> b; sets both eofbit and failbit: there was not enough characters to complete the parsing of the boolean true.
  • The character extraction overloads of operator>>std::basic_istream, if the end of the stream is reached before the limit (if any) on the number of characters to be extracted.
  • The std::get_time I/O manipulator and any of the std::time_get parsing functions: time_get::get, time_get::get_time, time_get::get_date, etc., if the end of the stream is reached before the last character needed to parse the expected date/time value was processed.
  • The std::get_money I/O manipulator and money_get::get function, if the end of the stream is reached before the last character needed to parse the expected monetary value was processed.
  • The basic_istream::sentry constructor, executed at the beginning of every formatted input function: unless the skipws bit is unset (e.g. by issuing std::noskipws), sentry reads and discards the leading whitespace characters. If the end of the input stream is reached during this operation, both eofbit and failbit are set, and no input takes place.
  • The I/O manipulator std::ws, if it reaches the end of the stream while consuming whitespace (but, unlike the formatted input sentry, it does not set failbit in this case)
  • The unformatted input functions basic_istream::read, basic_istream::get, basic_istream::peek, and basic_istream::getline, when reaching the end of the stream.
  • The discard input function basic_istream::ignore, when reaching the end of the stream before reaching the specified delimiter character.
  • The immediate input function basic_istream::readsome, if basic_streambuf::in_avail returns -1

The following functions clear eofbit as a side-effect:

The failbit

The failbit is set by the following standard library functions:

The badbit

The badbit is set by the following standard library functions:

rdbuf()->sputbackc() or rdbuf()->sungetc() return traits::eof().

  • basic_istream::sync, basic_ostream::flush, and every output function on a unitbuf output stream, if rdbuf()->pubsync() returns -1
  • Every stream I/O function if an exception is thrown by any member function of the associated stream buffer (e.g. sbumpc(), xsputn(), sgetc(), overflow(), etc)
  • ios_base::iword and ios_base::pword on failure (e.g. failure to allocate memory)

Example

See also

The following table shows the value of basic_ios accessors (good(), fail(), etc.) for all possible combinations of ios_base::iostate flags:

ios_base::iostate flags basic_ios accessors
eofbit failbit badbit good() fail() bad() eof() operator bool operator!
false false false true false false false true false
false false true false true true false false true
false true false false true false false false true
false true true false true true false false true
true false false false false false true true false
true false true false true true true false true
true true false false true false true false true
true true true false true true true false true