1) Template metaprogramming allows performing computations at compile time using templates.
2) In 1994, Erwin Unruh discovered template metaprogramming accidentally when his program calculated the first 30 prime numbers as part of a compiler error message.
3) Template metaprogramming is Turing complete and can be used to implement recursive functions and algorithms that execute at compile time rather than run time.