私は標準を見ましたが、明白な答えは見当たりませんでした。
私がこれをしたとしましょう:
std::istream_iterator<char> is(file);
while(is != std::istream_iterator<char>()) {
++is;
}
現在isはストリームの最後にあり、に等しくなりstd::istream_iterator<char>()ます。もう一度インクリメントするとどうなりますか?それはまだ等しいstd::istream_iterator<char>()ですか?またはos結果は未定義ですか?
がストリームの最後にある*is場合、標準はそれが未定義の動作であると明示的に述べています。isしかし、ストリームの終わりを超えて反復することに関しては何も見ていません...
編集:
私はこのようなことをするいくつかのコードに出くわしたので尋ねます:
// skip 2 input chars
++is;
++is;
if(is != std::istream_iterator<char>()) {
// continue using is and do some work...but what if the first
// increment made it EOS? is this check valid?
}