Listing 3

template<unsigned short Dim, unsigned short Order,
         unsigned short Num=Dim>
struct BasicTerm
{
  typedef Typelist<typename AddAt<
          typename Monomial<Dim,-Order>::Result,Num,1>::Result,
          typename BasicTerm<Dim,Order,Num-1>::Result> Result;
};
template<unsigned short Dim, unsigned short Order>
struct BasicTerm<Dim,Order,0>
{
   typedef NullType Result;
};