Параметрами шаблонов могут быть:
Для параметров любого типа можно указывать значения по умолчанию.
Параметры-типы описываются со словом class или typename -- это не имеет значения.
Для параметров обычных типов именно значение, а не тип определяет специализацию.
В данном примере у функции abs для одного и того же типа int порождается три разных специализации.
Параметры-шаблоны являются наиболее сложным видом параметров шаблонов и рассматриваются в профессиональной литературе по языку С++.