У меня есть шаблон, который я хочу специализировать с двумя типами int, один из которых просто старый int
, а другой - intptr_t
. На 64-битной платформе они имеют разные размеры, и я могу легко это сделать, но на 32-битных оба типа одинаковы, и компилятор выдает ошибку о переопределении. Что я могу сделать, чтобы это исправить, кроме отключения одного из определений препроцессором?
Пример кода:
template<typename T>
type * convert();
template<>
type * convert<int>() { return getProperIntType(sizeof(int)); }
template<>
type * convert<intptr_t>() { return getProperIntType(sizeof(intptr_t)); }
//this template can be specialized with non-integral types as well,
// so I can't just use sizeof() as template parameter.
template<>
type * convert<void>() { return getProperVoidType(); }