From cppreference.com
operator/* unspecified-boolean-type */()const; (1) (until C++11)explicitoperatorbool()const; (2) (since C++11)Checks whether the stream has no errors.
1) Returns a value that evaluates to false in a boolean context if fail() returns true, otherwise returns a value that evaluates to true in a boolean context.
2) Returns true if the stream has no errors and is ready for I/O operations. Specifically, returns !fail().
This operator makes it possible to use streams and functions that return references to streams as loop conditions, resulting in the idiomatic C++ input loops such as while(stream>>value){...} or while(std::getline(stream,string)){...}. Such loops execute the loop's body only if the input operation succeeded.
Parameters
(none)
Return value
1) A value that evaluates to true in a boolean context if the stream has no errors, a value that evaluates to false in a boolean context otherwise.
2)true if the stream has no errors, false otherwise.
Notes
This conversion can be used in contexts where a bool is expected (e.g. an
). However,
(e.g. to int) that can occur with bool are not allowed.
In C++98, operatorbool could not be provided directly due to
. The initial solution in C++98 is to provide operatorvoid*, which returns a null pointer if fail() returns true or a non-null pointer otherwise. It is replaced by the resolution of
, which allows
to be applied.
Since C++11, conversion functions can be
. The resolution of
introduced the explicit operatorbool and the boolean conversion is now safe.
Example
Run this code
#include<iostream>#include<sstream>intmain(){std::istringstreams("1 2 3 error");intn;std::cout<<std::boolalpha<<"s is "<<static_cast<bool>(s)<<'\n';while(s>>n)std::cout<<n<<'\n';std::cout<<"s is "<<static_cast<bool>(s)<<'\n';}Output:
s is true 1 2 3 s is false Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
C++98 operatorvoid* was provided a conversion function to an unspecified boolean type is provided instead See also
The following table shows the value of
accessors (
,
, etc.) for all possible combinations of
flags:
flags basic_ios accessors eofbitfailbitbadbit
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