This document provides an introduction to meta-programming in C++. It discusses how templates allow programs to generate other programs at compile-time, providing higher levels of abstraction, design, and efficiency. It covers key concepts like generic programming, functional programming idioms, template template parameters, and how control structures can be expressed with templates. Examples demonstrate how meta-programming can be used for tasks like loop unrolling, conversion checking, and computing dot products via recursion. Important C++ meta-programming libraries like Loki and Boost are also summarized.