Simply put, a metaprogram is a program which generates or manipulates program code. The ability to programmatically create software allows programmers to work at a higher level of abstraction appropriate to the problem domain, and allows the resulting code to be reconfigured without loss of efficiency. Ever since generic programming was introduced to C++, programmers have discovered myriad "template tricks" for manipulating programs *as they are compiled*, effectively eliminating the barrier between program and metaprogram. While the excitement generated by these capabilities among C++ experts has reached the community at large, their practical application remains out-of-reach for most programmers. This book provides the neccessary foundation to make template metaprogramming practical for everyone.