Exceptions
Macros remain the only solution for a few important tasks, such as
#include guards (see Item 24),
#ifdef and
#if defined for conditional compilation, and implementing
assert (see Item 68).C99] and [Boost] include moderate and radical extensions, respectively, to the preprocessor.