Recursion over a pack is the universal tool of metaprogramming: the same base-plus-step skeleton later filters types, transforms them and folds them. Counting is its simplest exercise — which is why the one-token sizeof... shortcut is off the table here.
Implement CountTypes<Ts...>::value — the number of types in the pack — WITHOUT using sizeof.... The point of the exercise is to walk a pack with recursion: base case plus one-step case.
The primary template handles the empty pack: value = 0. A specialization for <T, Ts...> adds 1 and recurses.
Hit Submit (or ⌘/Ctrl + ↵) — test results will show up here.