¿Qué significa el valor de retorno rdstate ()?

istream& Read(istream &is)
{
    std::string buf;
    while (is >> buf)       
    {   
        cout << is.eofbit << " " << is.failbit << " " << is.badbit << endl;
        cout << is.rdstate() << endl;
        cout << buf << endl;
    }
    cout << is.eofbit << " " << is.failbit << " " << is.badbit << endl;
    cout << is.rdstate() << endl;
    is.clear();
    cout << is.eofbit << " " << is.failbit << " " << is.badbit << endl;
    cout << is.rdstate() << endl;
    return is;
}

Si ingreso caracteres normales como "prueba", la salida es1 2 4 0.
Luego escribo CTRL + Z (windows), la salida es1 2 4 3 1 2 4 0.

Pregunta: 1. ¿Qué hacerdstate() valor de retorno significa? (¿Por qué genera 3, no 2? No 1?)

Por qué no lo hizois.eofbityis.failbit cambiar después de escribir CTRL + Z? (ComoC ++ Primer 5th Editon dice, Alcanzar conjuntos de fin de archivo tanto eofbit como failbit)

Respuestas a la pregunta(2)

Su respuesta a la pregunta