составлены на спрос, а это означает, что код шаблона функции не компилируются до экземпляра с конкретными аргументами шаблона не требуется.
В тот момент, когда экземпляр требует, компилятор генерирует функции
специально для тех аргументов шаблона.
Поскольку шаблоны компилируются при необходимости, это заставляет ограничение для нескольких файлов проектов: реализация (определение) шаблон класса или функции должны быть в тот же файл, как его заявлении. Это означает, что мы не можем отделить интерфейс в отдельный файл заголовка, и что мы должны включать в себя как интерфейса и реализации в любой файл, который использует шаблоны.
Поскольку код не генерируется, пока экземпляр шаблона, когда это требуется, компиляторы готовы разрешить включение несколько раз одного и того же файла шаблона с обеих деклараций и определений, содержащихся в проекте, не создавая связь ошибки.
Шаблоны и нескольких файлов проектов