このマクロはマクロ実行の正しいセマンティクスを実現するために遅延が必要なときに有用である。
例えば、マクロが別のマクロの引数リストに展開されるときである。
このようなマクロではまず最初に引数リストが展開され、それからさらにマクロを展開するために再度スキャンが行われる。
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/facilities/expand.hpp>
#define MACRO(a, b, c) (a)(b)(c)
#define ARGS() (1, 2, 3)
BOOST_PP_EXPAND(MACRO ARGS) // (1)(2)(3) に展開される
#define SAMPLE(n) \
BOOST_PP_EXPAND( \
MACRO, \
BOOST_PP_IF( \
n, \
(x, y, z), \
(a, b, c) \
) \
) \
/**/
SAMPLE(0) // (a)(b)(c) に展開される
SAMPLE(1) // (x)(y)(z) に展開される