A type argument is characterized implicitly, by its use in the function.
template<typename T> T max(const T& left, const T& right) { if (left < right) return right; return left; }