Simply put, a metaprogram is a program which generates or manipulatesprogram code. The ability to programmatically create software allowsprogrammers to work at a higher level of abstraction appropriate to theproblem domain, and allows the resulting code to be reconfigured without lossof efficiency. Ever since generic programming was introduced to C++,programmers have discovered myriad "template tricks" for manipulatingprograms *as they are compiled*, effectively eliminating the barrier betweenprogram and metaprogram. While the excitement generated by thesecapabilities among C++ experts has reached the community at large, theirpractical application remains out-of-reach for most programmers. This bookprovides the neccessary foundation to make template metaprogrammingpractical for everyone.