>>292 これならわかるだろうか?

template<class X, class Xs>
struct List;

struct Nil;

template<class Xs, class X>
struct Cons
{
typedef List<X, Xs> type;
};


template<class Xs, class X>
struct Append;

template<class X, class Xs, class Y>
struct Append<List<X, Xs>, Y>
{
typedef Cons<X, typename Append<Xs, Y>::type> type;
};

template<class X>
struct Append<Nil, X>
{
typedef typename Cons<X, Nil>::type type;
};