Listing 1
//Printing numbers in a range // primary template - performs recusion template <int start, int end> struct print_range { static void eval (void) { cout << start << " " ; // do work print_range <start+1, end>::eval( ); // recurse with new // arguments } }; // template specialization - ends recursion template < int end> struct print_range <end ,end> { static void eval (void) { cout << end << " " ; // no more recursion } }; print_range <1, 20>::eval( ); // A - print numbers 1 to 20