40 lines
2.0 KiB
Plaintext
40 lines
2.0 KiB
Plaintext
[/
|
|
(C) Copyright Edward Diener 2011
|
|
Distributed under the Boost Software License, Version 1.0.
|
|
(See accompanying file LICENSE_1_0.txt or copy at
|
|
http://www.boost.org/LICENSE_1_0.txt).
|
|
]
|
|
|
|
[section:tti_reason Why the TTI Library ?]
|
|
|
|
In the Boost Type Traits library there is compile time functionality for
|
|
querying information about a C++ type. This information is very useful
|
|
during template metaprogramming and forms the basis, along with the
|
|
constructs of the Boost MPL library, and some other compile time
|
|
libraries, for much of the template metaprogramming in Boost.
|
|
|
|
One area which is mostly missing in the Type Traits library is the ability
|
|
to determine what C++ inner elements are part of a user-defined type, where
|
|
the inner element may be a general nested type, a specific nested type such as a
|
|
class/struct, enumeration, or a union, a function or data member, static function or
|
|
static data member, or class template.
|
|
|
|
There has been some of this functionality in Boost, both in already existing
|
|
libraries and in libraries on which others have worked but which were
|
|
never submitted for acceptance into Boost. An example with an existing Boost
|
|
library is Boost MPL, where there is functionality, in the form of macros and
|
|
metafunctions, to determine whether an enclosing type has a particular nested
|
|
type or nested class template. An example with a library which was never
|
|
submitted to Boost is the Concept Traits Library from which much of the
|
|
functionality of this library, related to type traits, was taken and expanded.
|
|
|
|
It may also be possible that some other Boost libraries, highly dependent
|
|
on advanced template metaprogramming techniques, also have internal
|
|
functionality to introspect a type's elements at compile time. But to the best
|
|
of my knowledge this sort of functionality has never been incorporated in
|
|
a single Boost library. This library is an attempt to do so, and to bring
|
|
a recognizable set of interfaces to compile-time type introspection to Boost
|
|
so that other metaprogramming libraries can use them for their own needs.
|
|
|
|
[endsect]
|