#include <iostream>
#include <string>
#include <sstream>
#include <cassert>
int main()
{
{
std::istringstream stream( "-5" );
unsigned int val = 0;
// why is this allowed?
// -5 is not unsigned!
stream >> std::noskipws >> val;
bool success = stream.eof() && !stream.fail();
std::cout << success << ", val: " << val << std::endl;
}
{
// this still converts the value, but with fail
// you can detect the truncation
std::istringstream stream( "4294967291" );
int val = 0;
stream >> std::noskipws >> val;
bool success = stream.eof() && !stream.fail();
std::cout << success << ", val: " << val << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGNhc3NlcnQ+CgppbnQgbWFpbigpCnsKCXsKCQoJICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBzdHJlYW0oICItNSIgKTsKCSAgICB1bnNpZ25lZCBpbnQgdmFsID0gMDsgCgkgICAgLy8gd2h5IGlzIHRoaXMgYWxsb3dlZD8KCSAgICAvLyAtNSBpcyBub3QgdW5zaWduZWQhCgkgICAgc3RyZWFtID4+IHN0ZDo6bm9za2lwd3MgPj4gdmFsOwoJICAgIGJvb2wgc3VjY2VzcyA9IHN0cmVhbS5lb2YoKSAmJiAhc3RyZWFtLmZhaWwoKTsKCSAgICBzdGQ6OmNvdXQgPDwgc3VjY2VzcyA8PCAiLCB2YWw6ICIgPDwgdmFsIDw8IHN0ZDo6ZW5kbDsKCX0KCgkKCXsKCSAgICAvLyB0aGlzIHN0aWxsIGNvbnZlcnRzIHRoZSB2YWx1ZSwgYnV0IHdpdGggZmFpbAoJICAgIC8vIHlvdSBjYW4gZGV0ZWN0IHRoZSB0cnVuY2F0aW9uCgkgICAgc3RkOjppc3RyaW5nc3RyZWFtIHN0cmVhbSggIjQyOTQ5NjcyOTEiICk7CgkgICAgaW50IHZhbCA9IDA7CgkgICAgc3RyZWFtID4+IHN0ZDo6bm9za2lwd3MgPj4gdmFsOwoJICAgIGJvb2wgc3VjY2VzcyA9IHN0cmVhbS5lb2YoKSAmJiAhc3RyZWFtLmZhaWwoKTsKCSAgICBzdGQ6OmNvdXQgPDwgc3VjY2VzcyA8PCAiLCB2YWw6ICIgPDwgdmFsIDw8IHN0ZDo6ZW5kbDsKCX0KCgogICAgcmV0dXJuIDA7Cn0K