The iostream family of classes provides the following member functions and operators for checking the stream's state:
bool good() // returns true if no error flag is set
bool eof() // returns true if eofbit is set
bool fail() // returns true of failbit or badbit is set
bool bad() // returns true if badbit is set
bool operator!() // as fail()
operator void*() // returns null if fail() is true
In other words, good() takes all flags into account, including the eofbit, whereas fail(), operator!() and operator void*() ignore eofbit. Thus, if you wish to check whether the stream is in a state of error, use fail(), operator!() or operator void*(). On the other hand, to check a failure of input operations, call the member function good().