Это вопрос о недопустимом вводе, не недопустимом форматировании. Например, учитывая следующий код:
tm bar;
foo >> get_time(&bar, "%Y-%m-%d");
cout >> bar.tm_year >> bar.tm_mon >> bar.tm_mday >> endl;
Это нормально, если я определяю: stringstream foo("2001-02-28 non-leap year");
И имеет явную ошибку, если у меня недопустимый формат, например: stringstream foo("bad format 2001-02-28 non-leap year");
Но я не знаю, как определить, был ли мой ввод недействительным, например:
stringstream foo("2001-02-30 non-leap year");
В этом случае bar
можно читать так, как будто все в порядке. Есть ли что-то, что я могу прослушать, что предупредит меня о том, что ввод недействителен?
if (foo >> get_time(...)) {/*use bar*/}
- person chris   schedule 28.03.2015if(foo.good())
, для которого устанавливается значение false, только если форматирование недействительно, а не если ввод недействителен. Обычно вы можете протестировать облачный компилятор Visual Studio, но они не работают уже целый день... - person Jonathan Mee   schedule 28.03.2015