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 partial specialization, recursion, and the Standard Template Library's type traits are used to perform type computations and queries at compile-time. The document also covers how to compose metafunctions using the Boost Metaprogramming Library.