are templates used primarily for overloaded functions and classes where you have multiple data types for the same function/class, or varying arguments.
Templates are themselves turing-complete and can therefore be used for almost anything.
They can be used to achieve compile-time polymorphism;
They can be used to provide specialized implementations of algorithms for certain types;
They can be used to optimize certain operations;
So when you say turing your refering to the WWII turing machine for encrypting code. What does turing mean? In and of itself it doesn't answer my question. Why use templates.