basic_ios::fail

basic_ios::failは、エラー(failまたはbad)かどうかを判定する。

basic_ios::fail - cpprefjp C++日本語リファレンス

EOFとエラーは独立してるので、EOFであっても、エラーでないということはある。

eof()とは別にfail()でも調べる。

$ vi basic_ios.cpp
$ g++ basic_ios.cpp -o basic_ios
$ ./basic_ios
s: abcde
s = abcdeFGHIJ
good
$ ./basic_ios
s: xyzs = xyzDEFGHIJ
!
EOF
fail
$

ただ、この3文字の場合、EOFかつfailとなる。
これは、basic_istream::readの特徴で、文字数に達せずにEOFだとfailがtrueになるという仕様。

Sample/cpp/basic_ios/fail/src/basic_ios at master · bg1bgst333/Sample · GitHub