Same code work on different, unrelated types.

generic programming is a form of static polymorphism.

Generics are parameterized type supported by the common language runtime. A parameterized type is a type that is defined with unknown type parameter that is specified when the generic is used.

C++ supports templates and both templates and generics support parameterized types to create typed collection classes. However, templates provide compile-time parameterization.

Terminology Used With Generics

Type Parameters

A generic declaration contains one or more unknown types known as type parameters. Type parameters are given a name which stands for the type within the body of the generic declaration. The type parameter is used as a type within the body of the generic declaration. The generic declaration for List<T> contains the type parameter T.

Type Arguments

The type argument is the actual type used in place of the type parameter when the generic is specialized for a specific type or types. For example, int is the type argument in List<int>. Value types and handle types are the only types allowed in as a generic type argument.

Reference:

https://cppcheatsheet.com/notes/cpp/cpp_template.html