...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This section describes how the library is prepared for supporting multiple (not backward compatible) changes.
The elements of the library are defined in the boost::metaparse::v1
namespace.
For example the one_char
class is boost::metaparse::v1::one_char
and is available after including the <boost/metaparse/v1/one_char.hpp>
header file.
At the same time the library provides the <boost/metaparse/one_char.hpp>
header file which includes <boost/metaparse/v1/one_char.hpp>
and contains the following:
namespace boost { namespace metaparse { using v1::one_char; } }
This makes it possible to use one_char
as boost::metaparse::one_char
.
Future versions of the library may provide other namespaces (eg. v2
). The header files in <boost/metaparse/...>
provide the latest version of the
library. To always get version v1
,
one should use header files in <boost/metaparse/v1/...>
.
The library does not use inline namespaces to work on compilers that do not support them.
Macros defined by the library are prefixed with BOOST_METAPARSE_V1_
.
For example BOOST_METAPARSE_V1_STRING
.
It is defined in the <boost/metaparse/v1/string.hpp>
header file. The library provides the <boost/metaparse/string.hpp>
header file as well, which includes the definition of this macro and provides
the following definition:
#define BOOST_METAPARSE_STRING BOOST_METAPARSE_V1_STRING
This makes it possible to use the macro as BOOST_METAPARSE_STRING
.
Future versions of the library may define other versions of this macro (eg.
BOOST_METAPARSE_V2_STRING
).
BOOST_METAPARSE_STRING
will
refer to the latest version.
This versioning does not affect macros that may be overridden by the code
using the library. (eg. BOOST_METAPARSE_LIMIT_STRING_SIZE
)