次のコードは、Visual Studio 2013 で実行すると例外をスローしますが、gcc 4.9.2 ではスローしません。
報告されたエラーは次のとおりです。
「例外: stol 引数が範囲外です」
stol
は a を返すlong
ので、 のサイズはtemp
戻り値を保持するのに十分な大きさでなければなりません。
誰でもその動作を説明できますか。これはおそらくコンパイラのバグですか?
#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;
}