Listing 10
template<class TList, unsigned short Var> struct Differentiate;
template<unsigned short Var>
struct Differentiate<NullType,Var>
{
typedef NullType Result;
};
template<class NList, class Tail, unsigned short Var>
struct Differentiate<Typelist<NList,Tail>,Var>
{
private:
enum { pow = NL::NumAt<NList,Var>::value };
typedef typename Differentiate<Tail,Var>::Result next;
public:
typedef typename Loki::Select<pow==0,next,
Typelist<typename NL::AddAt<
typename NL::MultAt<NList,0,pow>
::Result,Var,-1>::Result,next> >::Result Result;
};