std :: istream operator exception reset / nicht geworfen
Ich bin nicht sicher, wie man @ benutstd::istream::exception
nach dem Standard, lassenstd::istream::operator>>
eine Ausnahme auslösen, wenn die Eingabe nicht in eine Variable eingelesen werden kann, z. doppelt. Der folgende Code hat ein anderes Verhalten mit clang / libc ++ und 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;
}
Istis.exceptions(std::istream::failbit);
Recht für den Zweck, @ zu lassoperator>>
werfen, nach dem C ++ Standard?