template <class NList, unsigned int i, int Num> struct AddAt;
template <int Head, class Tail, int Num>
struct AddAt<Numlist<Head, Tail>, 0, Num>
{
typedef Numlist<Head + Num, Tail> Result;
};
template <int Head, class Tail, unsigned int i, int Num>
struct AddAt<Numlist<Head, Tail>, i, Num>
{
typedef Numlist<Head,
typename AddAt<Tail, i-1, Num>::Result> Result;
};