The following code example is taken from the book
C++ Templates - The Complete Guide, 2nd Edition
by David Vandevoorde, Nicolai M. Josuttis, and Douglas Gregor,
Addison-Wesley, 2017
© Copyright David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor 2017
// recursive case:
template<typename List, unsigned N>
class NthElementT : public NthElementT<PopFront<List>, N-1>
{
};
// basis case:
template<typename List>
class NthElementT<List, 0> : public FrontT<List>
{
};
template<typename List, unsigned N>
using NthElement = typename NthElementT<List, N>::Type;