is_array
довольно просто и просто:
template<class T>
struct is_array{
static const bool value = false;
};
template<class T, std::size_t N>
struct is_array< T (&)[N] >{
static const bool value = true;
};
Просто частичная специализация на типе ссылки на массив.
is_class
немного сложнееи полагается на разрешение перегрузки и тот факт, что классы и структуры обладают конструкторами (или деструкторами).Поскольку я в настоящее время на моем iPod Touch, я не могу показать пример.Я отредактирую один из них, как только у меня снова будет доступ к ПК.
is_enum
зависит от встроенных функций компилятора, я верю, так что никакого примера там нет.по памяти, я могу ошибаться с перечислением.