The following code throws an exception when it is run under Visual Studio 2013 but not gcc 4.9.2.
The error reported is:
'exception: stol argument out of range'
stol
returns a long
so the size of temp
should be big enough to hold the returned value.
Can anyone explain the behaviour. Is this possibly a compiler bug?
#include <iostream>
#include <exception>
#include <string>
#include <stdexcept>
int main()
{
const std::string value = "4294967295"; // 0xffffffff
try
{
int64_t temp = std::stol(value);
}
catch (std::invalid_argument& ex)
{
std::cout << "invalid_argument: " << ex.what() << "\n";
}
catch (std::exception& ex)
{
std::cout << "exception: " << ex.what() << "\n";
}
return 0;
}