Listing 8

template<unsigned short Dim, unsigned short Order,
         unsigned short CurVar, unsigned short Num>
struct ShapeBasis
{
private:
   typedef typename NL::AddAt<
      typename Monomial<Dim,Order>::Result,CurVar,1>::Result T1;
   typedef typename Monomial<Dim,1-Num>::Result T2;
public:
   typedef Typelist<TYPELIST_2(T1,T2),
           typename ShapeBasis<Dim,Order,CurVar,Num-1>
                                ::Result> Result;
};
template<unsigned short Dim, unsigned short Order,
         unsigned short CurVar>
struct ShapeBasis<Dim,Order,CurVar,0>
{
   typedef UnitType Result;
};