Instead of
template <typename T>
void func(T arg) {/* something */}
why can’t we do
template <T>
void func(T arg) {/* something */}
From cplusplus.com :
The only difference between both
prototypes is the use of either the
keyword class or the keyword typename.
Its use is indistinct, since both
expressions have exactly the same
meaning and behave exactly the same
way.
It just seems like unnecessary boilerplate to me.
http://www.cplusplus.com/doc/tutorial/templates/ See the section on Non-type parameters for templates.
You need some keyword to distinguish type-parameters from non-type parameters.