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);&nbsp;certo com o objetivo de deixaroperator>>&nbsp;jogar, de acordo com o padrão C ++?