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; };