If calling something like input_stream >> i; where i is of arithmetic type, throws exception or sets badbit etc., is it guaranteed that i has not changed?
Before C++11, the value was left as it was, [reference]:
If extraction fails (e.g. if a letter was entered where a digit is expected),
valueis left unmodified andfailbitis set. (until C++11)
But after C++11, no. It is set to 0 if extraction fails (same reference):
If extraction fails, zero is written to
valueandfailbitis set. If extraction results in the value too large or too small to fit in value,std::numeric_limits<T>::max()orstd::numeric_limits<T>::min()is written andfailbitflag is set. (since C++11)