This is a standard technique that is quite often used when defining a template
recursively.
An example of such a technique would be sequences of integers:
template<int...s> struct seq {typedef seq<s...> type;};
In particular, in their generation:
template<int max, int... s> struct make_seq:make_seq<max-1, max-1, s...> {};
template<int... s> struct make_seq<0, s...>:seq<s...> {};
which is described recursively and simply by inheriting from a different instantiation of the template
.
To be explicit, make_seq<7>::type
is seq<0,1,2,3,4,5,6>
via 7 levels of recursive inheritance.