don't actually exist as functions until they are applied to a given type or class; when the templated function or class is invoked with a class or typename argument, the compiler generates the actual function/class from that template, but the actual functions from two different uses of a template are, in fact, separate functions.
C and C++ programmers, IME, generally don't see them this way, because many of them are only familiar with C preprocessor macros, which are very different (and both more limited and more powerful, in various ways); but a Lisp programmer who looks at generics - whether in C++, Ada, Java, Common Lisp, or what have you - is immediately going to think, 'macro', because they are programmable constructs which get expanded at compile time into more complex structures by manipulating the code itself before actual processing. |