Операция исключения оператора std :: istream сброшена / не выброшена
Я не уверен, как использоватьstd::istream::exception
согласно стандарту, позволитьstd::istream::operator>>
бросить исключение, если он не может прочитать входные данные в переменную, например, двойной. Следующий код имеет различное поведение с clang / libc ++ и 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);
право на то, чтобы позволитьoperator>>
бросить, согласно стандарту C ++?