Templates (sometimes called generics in other programming languages) provide the ability to parametrize types and functions with types.