To erase a type from a tt(TypeList) by its index we again use a
recursive template meta program. tt(EraseIdx) expects a tt(size_t) index value
and a tt(TypeList) from which its tt(idx)sups(th) (0-based) type must be
erased. tt(EraseIdx) defines the type tt(List) containing the resulting
tt(TypeList). Here is the algorithm:
    itemization(
    it() The foundation of the algorithm consists of a struct template
tt(EraseIdx) expecting the index of the type to erase and a tt(TypeList):
            verbinclude(//ERASEIDX examples/erase.h)
    it() If the typelist is empty, there's nothing to erase, and an empty
        tt(TypeList) results:
            verbinclude(//ERASEIDXEMPTY examples/erase.h)
    it() The recursion otherwise ends once tt(idx) becomes 0. At that point
        the tt(TypeList)'s first type is ignored and tt(List) is initialized
        to a tt(TypeList) containing the types in the orginal tt(TypeList)'s
        tail:
            verbinclude(//ERASEIDXZERO examples/erase.h)
    it() In all other cases tt(EraseIdx) is applied to the tt(TypeList)'s
        tail, providing it with a decremented value of tt(idx). To the
        resulting tt(TypeList) the orginal tt(TypeList)'s head is
        prefixed. The tt(TypeList) returned by the prefix operation is then
        returned as tt(EraseIdx::List):
            verbinclude(//ERASEIDXNEXT examples/erase.h)
    )
    Here is a statement showing how tt(EraseIdx) can be used:
            verbinclude(//ERASEIDX examples/erase.cc)
