Among OOP languages, C++, Beta, Eiffel, Ada, and later versions of Java provides generic facility. In C++, templates support generics and popularized the notion of generics.
For example, in C++ code,
templateT max (T x, T y) { if (x < y) return y; else return x;}
In this case, a pseudo-datatype T is called "subtype". T can be anything that can be compared.
Uncommon, template metaprogramming is a way of making algorithms evaluate when your code is compiled.
See also Partial evaluation