¿Por qué stringstream >> cambia el valor del objetivo en caso de fallo?

De TC ++ PL de Stroustrup, 3ra Edición, Sección 21.3.3:

Si intentamos leer en una variable vy la operación falla, el valor de v no debe cambiarse (no se modifica si v es uno de los tipos manejados por las funciones miembro de istream o ostream).

El siguiente ejemplo parece contradecir la cita anterior. En base a la cita anterior, esperaba que el valor de v permaneciera sin cambios, pero se pone a cero. ¿Cuál es la explicación de este aparente comportamiento contradictorio?

#include <iostream>
#include <sstream>

int main( )
{
    std::stringstream  ss;

    ss  << "The quick brown fox.";

    int  v = 123;

    std::cout << "Before: " << v << "\n";

    if( ss >> v )
    {
        std::cout << "Strange -- was successful at reading a word into an int!\n";
    }

    std::cout << "After: " << v << "\n";

    if( ss.rdstate() & std::stringstream::eofbit  ) std::cout << "state: eofbit\n";
    if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n";
    if( ss.rdstate() & std::stringstream::badbit  ) std::cout << "state: badbit\n";

    return 1;
}

La salida que obtengo utilizando x86_64-w64-mingw32-g ++. Exe (rubenvb-4.7.2-release) 4.7.2 es:

Before: 123
After: 0
state: failbit

Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta