It's important to understand separate compilation and the possibility of resulting executable blowoutsize increases. If you instantiate the template with the same type in several C++ files, you will get the type reproduced multiple times, at least on some compilers.