Redefinição de exceção do operador std :: istream / não lançada
Não tenho certeza sobre como usarstd::istream::exception
de acordo com o padrão, deixarstd::istream::operator>>
lançar uma exceção se não conseguir ler a entrada em uma variável, por exemplo Duplo. O código a seguir tem um comportamento diferente com clang / libc ++ e 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;
}
Éis.exceptions(std::istream::failbit);
certo com o objetivo de deixaroperator>>
jogar, de acordo com o padrão C ++?