Какой эффект будет иметь LWG2349?
Хотя libstdc ++ нет, libc ++ следуетстандарт, в котором говорится это прохождениеios_base::failbit
вbasic_istream::exceptions
не влияет на форматированный ввод. Например этот код:
istringstream is{"ASD"};
double foo;
is.exceptions(istream::failbit);
try {
is >> foo;
cout << foo << endl;
} catch(ios_base::failure& fail) {
cout << "ouch\n";
}
Приведет к:
"ой" на libstdc ++«0» на libc ++Мое чтениеLWG2349 что это приведет кbasic_istream
не бросать на любой форматированный ввод.
Например, LWG2349 предлагает изменить стандарт 27.7.2.3 [istream] / 1, который цитировался со ссылкой нанедействительность ошибки, которая заставила бы libc ++ вести себя как libstdc ++, Изменение выделено жирным шрифтом и выделено ниже:
Если исключениекроме брошенных изclear()
если есть, бросается во время ввода, тоios::badbit
включен в*this
В состоянии ошибки.(Исключения выбрасываются изbasic_ios<>::clear()
не поймали или не бросили.) Если(exceptions()&badbit) != 0
тогда исключение перебрасывается.
Я это понимаюbasic_istream::clear
это то, что вызывает реакцию на плохо отформатированный ввод так что я неправильно читаю LWG2349 или он на самом деле собирается остановитьсяbasic_istream
от каких-либо ошибок?