Иногда я получаю предупреждения с преобразованием из более длинного типа в меньший, например:
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() ) );
or
f( boost::numeric_cast< unsigned short >( v.size() ) );
Но на моей текущей работе буст не используется и с прошлого месяца утверждения запрещены.
Какие другие безопасные способы подавления этого предупреждения вы знаете?
Есть ли подводные камни в описанных способах?
PS: Не всегда возможно изменить подпись f, также иногда действительно следует принимать мелкий числовой тип.
ОТРЕДАКТИРОВАНО: я хочу сделать конверсию максимально безопасной.