Вы должны сделать свою собственную специализацию шаблона для этого:
template<typename tp>
class bigger { }
template
class bigger<boost::int8_t>
{
typedef boost::int16_t type;
}
template
class bigger<boost::int16_t>
{
typedef boost::int32_t type;
}
template
class bigger<boost::int32_t>
{
typedef boost::int64_t type;
}
Вы также можете создать макрос, если вам не нравится печатать много:
#define BIGGER(x, y) \
template \
class bigger<boost::int##x##_t> \
{ \
typedef boost::int##y##_t type; \
}
BIGGER(8, 16);
BIGGER(16, 32);
BIGGER(32, 64);
изатем используйте его как
bigger<boost::int32_t>::type x;