Результат только верный; ваша третья специализация вызывается, когда вы звоните isPtr <int const * const>
; который вы устанавливаете на true
.
В этом случае вы можете выбрать enum
вместо bool
, так как у вас есть 3 состояния:
enum TYPE
{
NOT_POINTER,
IS_POINTER,
IS_CONST_POINTER
};
template<class T> struct
isPtr {
static const TYPE value = NOT_POINTER;
};
template<class U> struct
isPtr<U*> {
static const TYPE value = IS_POINTER;
};
template<class U> struct
isPtr<U * const> {
static const TYPE value = IS_CONST_POINTER;
};
Вот демо .