長い型から小さな型への変換で警告が表示されることがあります。
void f( unsigned short i ) // f - accept any numeric type
// smaller than std::vector<>::size_type
{}
std::vector < some_type > v;
..
f ( v.size() );
通常、次のソリューションのいずれかを使用していました。
assert( v.size() <= std::numeric_limits< unsigned short >::max() );
f( static_cast< unsigned short >( v.size() ) );
また
f( boost::numeric_cast< unsigned short >( v.size() ) );
しかし、私の現在の作業ではブーストは使用されておらず、先月からアサートは許可されていません。
この警告を抑制するために知っている他の安全な方法は何ですか?
説明された方法で落とし穴はありますか?
PS: f のシグネチャを常に変更できるとは限りません。また、小さな数値型を実際に受け入れる必要がある場合もあります。
編集済み: 変換をできるだけ安全にしたい。