TTI is a library which provides the ability to introspect by name the elements
of a type at compile time.

TTI works through macros generating metafunctions. Metafunctions are class
templates of a particular syntax, having a nested 'type' member. So wherever
in C++ class templates can occur, TTI macros can be used. The metafunctions
generated by TTI are no different from any other metafunction as defined by
the Boost MPL library.

The metafunctions generated by TTI are used to introspect elements of a type
at compile time, always passing at minimum to each metafunction the enclosing
type being introspected.

The name of the library has been chosen because the library offers compile
time functionality on a type, similar to the Boost Type Traits library, and
because the functionality the library offers is the ability to introspect a
type about the existence of a specific element within that type.

I use the word "introspect" in a very broad sense here. Normally
computer language introspection means initially asking for information to be
returned by name, which can then further be used to introspect for more specific
information. In the TTI library one must always know and supply the name, and
use the functionality provided for the correct type of inner element to find
out if that particular named entity exists.

You may prefer the term "query" instead of "introspection"
to denote what this library does, but I use terminology based on the word "introspect"
throughout this documentation.

The functionality of the library may be summed up as:

Provide the means to introspect a type at compile time using a set of macros.
Each macro takes the name of the type's element and generates a metafunction
which can be subsequently invoked to determine whether or not the element
exists within the type. These generated metafunctions will be called "macro
metafunctions" in the documentation.

Provide the means to create a typedef for a type which may not exist. This
typedef type can be used as a type in the metafunctions of the library
without producing compile-time errors.

There are is a single header file, boost/tti/tti.hpp,
which includes all the header files in the library.

There are also separate specific header files for each of the elements to
be introspected by the library. This allows for finer-grained inclusion of
the nested elements to be introspected. These header files are: