Почему stringstream >> изменяет значение цели при сбое?

Из Страуструпаs TC ++ PL, 3-е издание, раздел 21.3.3:

Если мы попытаемся прочитать переменную v, и операция не удастся, значение v должно быть неизменным (оно не изменится, если v является одним из типов, обрабатываемых функциями-членами istream или ostream).

Следующий пример противоречит приведенной выше цитате. Основываясь на приведенной выше цитате, я ожидал, что значение v останется неизменным - но оно обнуляется. Какие'Объяснение этого очевидного противоречивого поведения?

#include 
#include 

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

Ответы на вопрос(2)

Ваш ответ на вопрос