Summary This question is about achieving separate compilation of a single template class instantiation in a several different translation units.
Separate compilation of templates is tricky but allowed. What you cannot do is to explicitly instantiate the type in multiple translation units, in the same way that you cannot define the same function in two translation units.