Хороший вопрос. Было бы неплохо иметь возможность перехватывать другие сбои в этом вызове, но продолжайте нормально, когда он нажмет eof.
Тем не менее, я раньше не использовал исключения с потоками. Я думаю, вы могли бы сделать копию и проверить состояние потока впоследствии, чтобы обнаружить другие ошибки, например:
ifstream ifs(argv[1]);
if (!ifs) {
cerr << "Couldn't open " << argv[1] << '\n';
return -1;
}
//ifs.exceptions(ios::failbit | ios::badbit);
istream_iterator<std::string> iss(ifs), iss_end;
copy(iss, iss_end, ostream_iterator<std::string>(cout, "\n"));
if (!ifs.eof()) {
cerr << "Failed to read the entire file.\n";
return -2;
}