In C++ metaprogramming refers to the use of macros or templates to generate code at compile-time.

In general, macros are frowned upon in this role and templates are preferred, although they are not as generic.

Template metaprogramming often makes use of compile-time computations, whether via templates or constexpr functions, to achieve its goals of generating code, however compile-time computations are not metaprogramming.

Metaprogramming (or more specifically, template metaprogramming) is the practice of using templates to create constants, functions, or data structures at compile-time. This allows computations to be performed once at compile time rather than at each run time.

Calculating Factorials

Iterating over a parameter pack

Iterating with std::integer_sequence

Tag dispatching

Detect if expression is valid

if-then-else

Manual distinction of types when given any type T

Calculating power with C++ 11

Generic min/max with variable argument count