The following templates transform one type to another, based upon some well-defined
rule. Each template has a single member called type
that is the result of applying the transformation to the template argument
T.

For all of these templates support for partial specialization of class templates
is required to correctly implement the transformation. On the other hand,
practice shows that many of the templates from this category are very useful,
and often essential for implementing some generic libraries. Lack of these
templates is often one of the major limiting factors in porting those libraries
to compilers that do not yet support this language feature. As some of these
compilers are going to be around for a while, and at least one of them is
very wide-spread, it was decided that the library should provide workarounds
where possible.

The basic idea behind the workaround is to manually define full specializations
of all type transformation templates for all fundamental types, and all their
1st and 2nd rank cv-[un]qualified derivative pointer types, and to provide
a user-level macro that will define all the explicit specializations needed
for any user-defined type T.

The first part guarantees the successful compilation of something like this: