If I read an integer from a istream using the >> operator, and the represented integer larger than INT_MAX then the operation just returns INT_MAX.
I am currently do
The best way to do this is to read the value as a string and then convert it into an integer. During the conversion, you can catch whether the value fits within the range of the type you're converting to.
boost::lexical_cast
is a good library for this. It will throw an exception if the value cannot fit in the target type.