Listing 4
// Support for nested metaloop struct None {}; template <int start, int end , typename Nested = None> struct Loop2 // outer loop: recurse { template <typename T> static void eval( T expr ) { Nested::eval( boost::bind( expr , start, _1 ) ); Loop2<start+1, end, Nested>::eval( expr ); } }; template <int end , typename Nested> struct Loop2 <end, end, Nested> // outer loop: terminate recursion { template <typename T> static void eval( T expr ) { Nested::eval( boost::bind( expr , end , _1) ); } }; template <int start, int end> struct Loop2 <start, end, None> // inner loop: recurse { template <typename T> static void eval( T expr ) { expr(start); // some compilers prefer => boost::bind(expr,start)() Loop2<start+1, end>::eval( expr ); } }; template <int end > struct Loop2 <end, end, None> // inner loop: terminate recursion { template <typename T> static void eval( T expr ) { expr(end); // some compilers prefer => boost::bind(expr,end)() } };