std :: restablecimiento de excepción de operador istream / no lanzado
No estoy seguro de cómo usarstd::istream::exception
de acuerdo con el estándar, dejarstd::istream::operator>>
lanzar una excepción si no puede leer la entrada en una variable, p. doble. El siguiente código tiene un comportamiento diferente con clang / libc ++ y gcc / libstdc ++:
#include <iostream>
#include <cassert>
int main () {
double foo,bar;
std::istream& is = std::cin;
is.exceptions(std::istream::failbit);
is >> foo; //throws exception as expected with gcc/libstdc++ with input "ASD"
std::cout << foo;
is >> bar;
std::cout << bar;
assert(is); //failed with clang/libc++ after input "ASD"
std::cout << foo << " " << bar << std::endl;
}
Esis.exceptions(std::istream::failbit);
adecuado para el propósito de dejaroperator>>
tiro, de acuerdo con el estándar C ++?