От Stroustrup TС++ PL, 3-е издание, раздел 21.3.3:
Если мы попытаемся прочитать переменную v и операция завершится неудачно, значение v должно быть неизменным (оно не изменяется, если v является одним из типов, обрабатываемых функциями istream или ostream-членами).
Следующий пример, похоже, противоречит приведенной цитате. Основываясь на приведенной выше цитате, я ожидал, что значение v останется неизменным - но оно обнуляется. Какое объяснение этого очевидного противоречивого поведения?
#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;
}
Выход, который я получаю с помощью x86_64-w64-mingw32-g++. exe (rubenvb-4.7.2-release) 4.7.2:
Before: 123
After: 0
state: failbit
Спасибо.
