Objectives:
* To introduce and apply the syntax and semantics of C++ function templates and class templates.
* To understand common template-based programming practices and techniques, including generic programming, traits, concepts, and adapters.
* To understand and apply techniques of C++ template metaprogramming, including compile-time type computations, algorithms, and control structures.