Вы, кажется, путаете одну вещь:
Инстанцирование происходит во время компиляции , а не во время выполнения.Следовательно, вы не можете сказать «по какой строке» был создан шаблон класса или шаблон функции.
Тем не менее, вы правы в том, что шаблоны функций-членов не создаются вместе с шаблонами классов.
Вы можете наблюдать это в таком случае: у вас есть следующие файлы
- template.h (определяет класс A и функцию A :: foo)
- a.cpp (использует A)
- b.cpp (использует A и A:: foo)
Тогда при компиляции a.cpp будет создан только A.Однако во время компиляции b.cpp оба экземпляра будут созданы.
Из-за этого в случае, если A :: foo содержит некоторый семантически недопустимый код для данного набора параметров шаблона, вы получите ошибки компиляции в b.cpp, но не a.cpp.
Надеюсь, это прояснит ситуацию!