На самом деле с точностью до наоборот. В современных стандартах код
пишется проще и более читаем. Вот так длину списка типов приходилось вычислять Александреску
class NullType {};
template <class TList> struct Length;
template <> struct Length<NullType>
{
enum { value = 0 };
};
template <class T, class U>
struct Length< Typelist<T, U> >
{
enum { value = 1 + Length<U>::value };
};
Использование - Length<TList>::value;
Вот так это делают сейчас
template<typename... Ts>
struct TypeList
{
static consteval auto size() { return sizeof...(Ts); }
};
Использование - tlist.size(); или TList::size();