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 ++?

Respuestas a la pregunta(2)

Su respuesta a la pregunta