Какой эффект будет иметь 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 от каких-либо ошибок?

Ответы на вопрос(1)

Ваш ответ на вопрос