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