Само слово шаблон дает понимание этого механизма. Язык позволяет создавать нечто обобщенное, эксплуатирующее статический полиморфизм, при помощи этого механизма. Равно как и в языках разметки текста, в с++ шаблоны языковых единиц имеют аргументы, которые будут подставлены (инстанциированы). До этого этапа шаблонный код стоит рассматривать как синтаксически (с точки зрения ЯП) верный "текст". На этапе инстанциации аргументы шаблона подставляются как есть, генерируется (условно) код, который может быть скомпилирован в объектный файл.
с++ на данный момент поддерживает типовые и нетиповые параметры шаблона (и даже лямбда-функции, что бывает крайне полезно). Рассмотрим пример примитивного класса, чьей задачей является хранение значения любого типа (пример максимально упрощен, посему опущены синтаксические фишки и плюшки):
template <typename T>
class ValueHolder