Предположим, что у меня есть функция, подобная этой:
static const boost::int32_t SOME_CONST_VALUE = 1073741823;
template<typename targetType, typename sourceType>
targetType Convert(sourceType source)
{
typedef decltype(source * SOME_CONST_VALUE) MulType_t;
//typedef boost::int64_t MulType_t;
MulType_t val = (MulType_t)source * (MulType_t)SOME_CONST_VALUE;
return val / (MulType_t)SOME_CONST_VALUE;
}
Когда я вызываю эту функцию вот так
boost::int32_t i = std::numeric_limits<boost::int32_t>::max();
boost::int32_t k = Convert<boost::int32_t>(i);
k равно 1, из-за переполнения при умножении. Приведение всего к boost::int64_t
приведет к нужному мне результату. Но я не хочу приводить short или char к значению int64.
Так могу ли я использовать decltype для получения следующего большего типа выражения.