The concept of generic programming: parameterized data structures and algorithms. Generic programming in C ++: function templates, overlapping (overload) generic functions, templates class, template specialization class (partial and complete). Static polymorphism: advantages, disadvantages and combining with dynamic polymorphism. The concept of template meta-programming: history, form of functional programming, partial algorithm execution at compile time, advantages and disadvantages, recursion and branching, advanced features (template, template parameters, templates with a variable number of parameters). The mechanism of selecting the best alternative among several functions of the same name (overload resolution). Point of adjustment (point of customization) in a generic algorithm. Applications: standard library (STL, tuple, initializer_list), determination and verification of types, calculation and checking values available at compile time, code optimization, policy based design.