Операция исключения оператора 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 ++?

Ответы на вопрос(2)

Ваш ответ на вопрос