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.