Listing 12
template<class TList> struct Expand; template<class H, class T, class Tail> struct Expand<Typelist<Typelist<H,T>,Tail> > { typedef typename Mult<Typelist<H,T>,Tail>::Result Result; }; typedef ShapeFunction3<2,2,NUMLIST_2(0,0)> sf1; typedef ShapeFunction3<2,2,NUMLIST_2(0,1)> sf2; typedef Simplify<Expand<sf1::Result>::Result>::Result f1; typedef Simplify<Expand<sf2::Result>::Result>::Result f2; typedef Integrate3<Mult<Differentiate<f1,1>::Result, Differentiate<f2,1>::Result>::Result> in1; typedef Integrate3<Mult<Differentiate<f1,2>::Result, Differentiate<f2,2>::Result>::Result> in2; std::cout<<in1::val()/(sf1::denom*sf2::denom) +in2::val()/(sf1::denom*sf2::denom);