C ++ Read int desde istream, detectar desbordamiento
Si leo un entero desde un istream usando el operador >> y el entero representado más grande que INT_MAX, entonces la operación simplemente devuelve INT_MAX.
Actualmente estoy haciendo una comparación con INT_MAX para detectar el desbordamiento, pero si la operación se ingresa "2147483647", devolverá un error cuando en realidad no hubo ninguno y el resultado es válido.
Ejemplo:http://ideone.com/4bXyGd
#include <iostream>
#include <sstream>
#include <climits>
int main() {
std::istringstream st("1234567890123"); // Try with 2147483647
int result;
st >> result;
if (result == INT_MAX)
std::cout << "Overflow!" << std::endl;
else
std::cout << result << std::endl;
return 0;
}
¿Cuál es la forma ideológicamente correcta de hacer esto?