Можно ли вынести реализацию шаблонного класса в отдельный cpp файл?
Можно. Но при условии, что вручную будут инстанцированы шаблоны для каждого из используемых типов.
Можно в таких случаях.
1. Если у шаблона ровно N специализаций и (N+1)-й быть не может.
2. Если он private и его синтаксически невозможно вызвать откуда-то ещё, кроме CPP.
3. template<> (полностью специализированная функция без шаблонных параметров). Ей место именно в CPP, если она общедоступная и не inline.
Стек, очевидно, ни к одному из этих случаев не относится.
Код создаёт не сам шаблон, а его расшаблонивание!