Template C++ Tutorial

/* The following code example is taken from the book
 * "C++ Templates - The Complete Guide"
 * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002
 *
 * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.
 * Permission to copy, use, modify, sell and distribute this software
 * is granted provided this copyright notice appears in all copies.
 * This software is provided "as is" without express or implied
 * warranty, and with no claim as to its suitability for any purpose.
 */
// maximum of two int values
#include 
using namespace std;
inline int const& max (int const& a, int const& b)
{
    return  a < b ? b : a;
}
// maximum of two values of any type
template 
inline T const& max (T const& a, T const& b)
{
    return  a < b ? b : a;
}
// maximum of three values of any type
template 
inline T const& max (T const& a, T const& b, T const& c)
{
    return ::max (::max(a,b), c);
}
int main()
{
    cout <<"\n\n" <<::max(7, 42, 68);     // calls the template for three arguments
    cout <<"\n\n" <<::max(7.0, 42.0);     // calls max (by argument deduction)
    cout <<"\n\n" <<::max('a', 'b');      // calls max (by argument deduction)
    cout <<"\n\n" <<::max(7, 42);         // calls the nontemplate for two ints
    cout <<"\n\n" <<::max<>(7, 42);       // calls max (by argument deduction)
    cout <<"\n\n" <<::max(7, 42); // calls max (no argument deduction)
    cout <<"\n\n" <<::max('a', 42.7);     // calls the nontemplate for two ints
}
68
42
b
42
42
42
97"