Generic programming
In computer science, generics are a technique that allows one value to take different datatypes (so-called polymorphism) as long as certain contracts (so-called subtype) are kept. The programming style with it is called generic programming.Among OOP languages, C++, D, BETA, Eiffel, Ada, and later versions of Java provides generic facility. In C++, templates support generics and popularized the notion of generics.
Uncommon, template metaprogramming is a way of making algorithms evaluate when your code is compiled.
See also Partial evaluation