////
Copyright 2020 Peter Dimov
Distributed under the Boost Software License, Version 1.0.
https://www.boost.org/LICENSE_1_0.txt
////

[#overview]
# Overview
:idprefix: overview_

This library enables authors of user-defined types (enums, structs
and classes) to describe their enumerators, base classes, data members
and member functions. This information can later be queried by other
code portions, possibly written by a different author, using the
supplied primitives `describe_enumerators`, `describe_bases`, and
`describe_members`.

To learn how to describe enumeration types, see <<enums>>.

To learn how to describe class types, including structs, see <<classes>>.

For examples how this functionality is useful, see <<examples>>.

The purpose of the library is to establish a standard way of providing
these reflection abilities. Many existing libraries provide their own
way of describing enums or classes, but without a standard, code written by
different people cannot interoperate.

Eventually, one might hope for the primitives to end up in the {cpp} standard,
with the compiler automatically supplying the metadata necessary to describe
the types, making manual macro annotation unnecessary.
