| Home | Libraries | People | FAQ | More

# Configuration Header boost/config.hpp

The boost/config.hpp header is used to pass configuration information to other boost files, allowing them to cope with platform dependencies such as arithmetic byte ordering, compiler pragmas, or compiler shortcomings. Without such configuration information, many current compilers would not work with the Boost libraries.

Centralizing configuration information is this header reduces the number of files which must be modified when porting libraries to new platforms, or when compilers are updated. Ideally, no other files would have to be modified when porting to a new platform.

Configuration headers are controversial because some view them as condoning broken compilers and encouraging non-standard subsets. Adding settings for additional platforms and maintaining existing settings can also be a problem. In other words, configuration headers are a necessary evil rather than a desirable feature. The boost config.hpp policy is designed to minimize the problems and maximize the benefits of a configuration header.

## Boost config.hpp policy

For Library Users:

- Boost library users are never required to #include boost/config.hpp, and are discouraged from including it on their own.
- Boost library users can request support for additional platforms be added to config.hpp by emailing config@boost.org describing their request.

For Library Implementors:

- Boost library implementors are not required to #include boost/config.hpp, and are not required in any way to support compilers which do not comply with the C++ Standard (ISO/IEC 14882).
- If a library implementor wishes to support some nonconforming compiler, or to support some platform specific feature, #include boost/config.hpp is the preferred way to obtain configuration information not available from the standard headers such as <climits>, etc.
- If configuration information can be deduced from standard headers such as <climits>, use those standard headers rather than boost/config.hpp.
- Boost files that use macros defined in boost/config.hpp should have sensible, standard conforming, default behavior if the macro is not defined. This means that the starting point for porting boost/config.hpp to a new platform is simply to define nothing at all specific to that platform. In the rare case where there is no sensible default behavior, an #error message should describe the problem.
- If a Boost library implementor wants something added to config.hpp, post a request on the Boost mailing list. There is no guarantee such a request will be honored; the intent is to limit the complexity of config.hpp.

General:

- The intent is to support only compilers which appear on their way to becoming C++ Standard compliant, and only recent releases of those compilers at that.
- The intent is not to disable mainstream features now well-supported by the majority of compilers, such as namespaces, exceptions, RTTI, or templates.

## Documentation

See boost/config.hpp; it is designed to be self documenting.

## Test program

The config_test.cpp program can be used to verify which #defines are in effect for your compiler.

Revised 10 Nov 2000