Listing 1

template<unsigned int Len, int Value=0>
struct InitNumlist
{
   typedef Numlist<Value,
   typename InitNumlist<Len-1,Value>::Result> Result;
};
template<int Value>
struct InitNumlist<0,Value>
{
   typedef NullType Result;
};