Welchen Effekt hätte LWG2349?
Während libstdc ++ nicht folgt, folgt libc ++die Norm, die besagt, das Vorbeigehenios_base::failbit
zubasic_istream::exceptions
hat keine Auswirkung auf die formatierte Eingabe. Zum Beispiel dieser Code:
istringstream is{"ASD"};
double foo;
is.exceptions(istream::failbit);
try {
is >> foo;
cout << foo << endl;
} catch(ios_base::failure& fail) {
cout << "ouch\n";
}
Würde ergeben:
"autsch" auf libstdc ++ "0" in libc ++Meine Lektüre von LWG2349 ist, dass es @ verursachen würbasic_istream
, um keine formatierten Eingaben zu übernehmen.
Zum Beispiel schlägt LWG2349 eine Änderung an 27.7.2.3 [istream] / 1 der Norm vor, die unter Bezugnahme auf @ zitiert wurddie Ungültigkeit eines Fehlers, der dazu geführt hätte, dass sich libc ++ wie libstdc ++ verhalten hätte. Die Änderung ist fett gedruckt und unten durchgestrichen:
Wenn eine Ausnahme, außer denen, die von @ geworfen wurdclear()
, wenn überhaupt wird bei der Eingabe geworfen, dannios::badbit
ist eingeschaltet in*this
ehlerstatus von @. (Ausnahmen ausgelöst vonbasic_ios<>::clear()
werden nicht gefangen oder erneut geworfen.) Wenn(exceptions()&badbit) != 0
dann wird die Ausnahme erneut ausgelöst.
Ich verstehe dasbasic_istream::clear
reagiert auf falsch formatierte Eingaben so bin ich falsch LWG2349 zu lesen oder ist es in der Tat zu stoppenbasic_istream
Auslösen von Fehlern?