Many types in the standard library have additional meta-data
defined in them. For example, all container types have
a value_type defined which tells us the type of the items
that are stored in the collection. Iterators have tags
that tell us to which kind the iterator belongs to.
The problem is that this meta-information is mostly hard-coded.
Sometimes this is not enough. For example, when we work with
expression templates and other similar template-heavy techniques,
it is useful to be able to calculate the meta-information
bit by bit while the meta-program is being executed.
Since everything in a TMP program is immutable, we'll need to
use tricks to simulate mutability and step-by-step generation
of the type meta-data. In this talk, we will use and explain many
new C++ features like fold expressions, concepts, type lists and
index sequences, and the code will extensively use move semantics
to generate a cleaner assembly code for type instantiation.