А мне как то больше понравился такой вариант (где нет статического T _t):
template<class T>
class IsPointer
{
private:
struct TrueType { char dummy_ [1]; };
struct FalseType { char dummy_ [2]; };
struct PointerShim
{
PointerShim(const volatile void*);
};
static TrueType ptr_discriminator(PointerShim);
static FalseType ptr_discriminator(...);
static T rett();
public:
enum { value = sizeof(ptr_discriminator(rett())) == sizeof(TrueType) };
};
template<>
class IsPointer<void>
{
public:
enum { value = false };
};
Кстати, еще неплохо было бы дабавить IsArray, который таки почти смог добить Андрей Тарасевич в одном из топиков форума С++
PS Павел, кстати, эту же статью от вас я уже видел в каком то online издании.. Или я ошибаюсь?
Исправлена подсветка синтаксиса. -- ПК.