Using the macro metafunctions can be illustrated
by first creating some hypothetical user-defined type with corresponding nested
types and other inner elements. With this type we can illustrate the use of
the macro metafunctions. This is just meant to serve as a model for what a
type T might entail from within a class or function template where 'T' is a
type passed to the template.

I will be using the type above just to illustrate the sort of metaprogramming
questions we can ask of some type T which is passed to the template programmer
in a class template. Here is what the class template might look like:

Now let us create and invoke the macro metafunctions for each of our inner
element types, to see if type T above corresponds to our hypothetical type
above. Imagine this being within 'OurTemplateClass' above. In the examples
below the same macro is invoked just once to avoid ODR violations.