Как определить больший тип выражения decltype

Предположим, что у меня есть функция, подобная этой:

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 для получения следующего большего типа выражения.

5
задан mkaes 21 November 2011 в 16:24
поделиться