Por que o stringstream >> altera o valor do alvo na falha?

Do TC ++ PL da Stroustrup, 3ª Edição, Seção 21.3.3:

Se tentarmos ler em uma variável v e a operação falhar, o valor de v deverá permanecer inalterado (não será alterado se v for um dos tipos manipulados pelas funções de membro istream ou ostream).

O exemplo a seguir parece contradizer a citação acima. Com base na citação acima, esperava que o valor de v permanecesse inalterado - mas fica zerado. Qual é a explicação para esse aparente comportamento contraditório?

#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;
}

A saída que recebo usando x86_64-w64-mingw32-g ++. Exe (4.7.4-release-release 4.7.2) é:

Before: 123
After: 0
state: failbit

Obrigado.