When decoding integer value greater than Value::MaxUInt/10 == 429496729, the node is decoded as real value, although it could and should be decoded as unsigned integer.
This renders common testing for isIntegral() or isInt() almost useless, because you can't be ever sure if the type was not changed to real as a result of the big value. You would always have to use isReal() and convert the value back to integer.
IMHO, all this threshold stuff should be removed and integral values should be always treated as integers, unless they exceed the MaxInt/MaxUInt thresholds, off course.
I would rather let users decide how to decode numbers, but that is difficult with the current API.
If this is still a problem with the latest code, please open a new issue: https://github.com/open-source-parsers/jsoncpp/issues/new