This document discusses C++ template metaprogramming. It explains that templates provide a Turing complete computation subsystem that runs during compilation. Template parameters can be types or non-type values like integers. Techniques like specialization, partial specialization, and recursion allow templates to perform complex type computations and manipulations at compile-time. The Boost Type Traits and MPL libraries provide many useful metafunctions for querying and transforming types. SFINAE and enable_if/disable_if allow selecting appropriate function templates based on type properties.