ios

iosは、basic_ios<char>のエイリアス。basic_iosは、basic_istreamの基底クラスの1つ。
ロケールや文字に依存した書式の状態、ストリームバッファの状態と操作を行うメンバが定義されている。

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

エラーやEOFでストリームの状態がどうなっているかの判定方法の1つをやってみる。

basic_istream::readの時のプログラムで、std::cinの参照をstd::ios&のacinとしてもらって、!acinがtrueなら、"!"を出力する。

basic_ios::operator void* - cpprefjp C++日本語リファレンス

EOFやエラーなどのfail状態(後のトピックで扱う。)になった時は、NULLポインタを返すので、その反転で!acinはtrueになると・・・。そういうこと。
(ただし、void *ポインタの演算子定義は、C++03までであり、C++11では、
basic_ios::operator bool - cpprefjp C++日本語リファレンス
boolの演算子定義になっているので、書き方によってはエラーになるので注意。)

$ vi ios.cpp
$ g++ ios.cpp -o ios
$ ./ios
s: abcde
s = abcdeFGHIJ
$ ./ios
s: xyzs = xyzDEFGHIJ
!
$

1回目は、5文字入力して、正常なので何も起きない。
2回目は、3文字入力したら、Ctrl+Dを2回押して、EOFを送っている。
readは指定の文字数に達せずにEOFを受け取ったので、この場合ストリームはfail状態になっている。

Sample/cpp/ios/ios/src/ios at master · bg1bgst333/Sample · GitHub