template <typename T>
inline T const& max (T const& a, T const& b)
{
// if a < b then use b else use a
return a<b?b:a;
}
...
For historical reasons, you can also use class instead of typename to define a type parameter.
The keyword typename came relatively late in the evolution of the C++ language.
Prior to that, the keyword class was the only way to introduce a type parameter, and this remains a valid way to do so.
Hence, the template max() could be defined equivalently as follows:
template <class T>
inline T const& max (T const& a, T const& b)
{
// if a < b then use b else use a
return a<b?b:a;
}
typename ввели для другой цели, но оказалось что оно более подходит (по смыслу слова) для использования и вместо class в <class T> (T ведб не обязано быть классом)