#include <iostream>
#include <boost/cast.hpp>
using namespace std;
int main()
{
using boost::numeric_cast;
try
{
long L = 70000;
short S = numeric_cast<short>( L );
cout << "OK: short " << S << endl;
}
catch( boost::bad_numeric_cast e )
{
cout << "overflow" << endl;
}
return 0;
}
例えばshort
が16bitの環境では70000はおさまりませんから、
例外が発生します。short
が32bitなら、Sに無事70000が入ります。
普通にキャストすると、キャスト先におさまらなかった部分は捨てられてしまいます。
そうでなくてはみだしてしまったことを検知したいときに、
この numeric_cast
が使えます。