Practices - Preprocessor Macros

Hiding code behind a macro makes it more difficult to debug and exposes it to a variety of subtle bugs.

Exception: BOOST_FOREACH and related macros are allowed.

Exception: header guard macros are mandatory

Exception: macros which are based on _DEBUG and related macros are allowed

Exception: there may be a family of macros which shall be used for profiling, logging and invariant checking. These macros are allowed and ecouraged.

Exception: when defining a boilerplate code, such as visitor patterns' members, it might be possible to use local preprocessor macros to avoid writing the same code ad infinitum. However such use should not bleed macros to the class interface.