/* 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 <iostream>
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 <typename T>
inline T const& max (T const& a, T const& b)
{
return a < b ? b : a;
}
// maximum of three values of any type
template <typename T>
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<double> (by argument deduction)
cout <<"\n\n" <<::max('a', 'b'); // calls max<char> (by argument deduction)
cout <<"\n\n" <<::max(7, 42); // calls the nontemplate for two ints
cout <<"\n\n" <<::max<>(7, 42); // calls max<int> (by argument deduction)
cout <<"\n\n" <<::max<double>(7, 42); // calls max<double> (no argument deduction)
cout <<"\n\n" <<::max('a', 42.7); // calls the nontemplate for two ints
}
68
42
b
42
42
42
97"