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 per se.
Metaprogramming can be described in two ways:
“Computer programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime”.
More simply put: Metaprogramming is writing code that writes code during runtime to make your life easier.