Que efeito o LWG2349 teria?
Enquanto libstdc ++ não, libc ++ segueo padrão que afirma essa passagemios_base::failbit
parabasic_istream::exceptions
não tem efeito na entrada formatada. Por exemplo, este código:
istringstream is{"ASD"};
double foo;
is.exceptions(istream::failbit);
try {
is >> foo;
cout << foo << endl;
} catch(ios_base::failure& fail) {
cout << "ouch\n";
}
Resultaria em:
"ai" no libstdc ++"0" na libc ++Minha leitura deLWG2349 é que isso causariabasic_istream
para não lançar nenhuma entrada formatada.
Por exemplo, o LWG2349 propõe uma alteração no padrão 27.7.2.3 [istream] / 1, que foi citado com referência aa invalidação de um bug que faria a libc ++ se comportar como libstdc ++. A mudança está em negrito e segue abaixo:
Se uma exceção, exceto os lançados declear()
, caso existam, é lançado durante a entrada, em seguidaios::badbit
está ligado*this
Estado de erro.(Exceções lançadas debasic_ios<>::clear()
não são capturados ou relançados.) E se(exceptions()&badbit) != 0
então a exceção é reapresentada.
Eu entendi aquilobasic_istream::clear
é o que lança em reação à entrada mal formatada então eu estou interpretando mal o LWG2349 ou de fato vai pararbasic_istream
de lançar algum erro?