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*thisehlerstatus 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage