template<class T>
const T& max(const T& x, const T& y);
template<class T, class Pred>
const T& max(const T& x, const T& y, Pred pr);
The first template function returns y if x < y. Otherwise, it returns x. T need supply only a single-argument constructor
and a destructor.
The second template function behaves the same, except that it replaces operator<(X, Y) with pr(X, Y).
Microsoft-Specific:
To avoid conflicts with min and max in WINDEF.H, use _MIN and _MAX instead. These macros evaluate to _cpp_min and _cpp_max, respectively.
END Microsoft-Specific