The BOOST_PP_EXPAND macro performs a double macro-expansion on its argument.

#### Usage

BOOST_PP_EXPAND(x)

#### Arguments

x
  The argument to be expanded twice.

#### Remarks

This macro is useful when a delay is necessary to produce the correct semantics of a macro invocation. For example, when a macro expands to an argument list to another macro. This macro will expand the the argument list on the first pass, and then rescan to expand any more macros.

#### Requirements

Header: <boost/preprocessor/facilities/expand.hpp>

#### Sample Code

    #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) // expands to (1)(2)(3)

    #define SAMPLE(n) /* ... */ \
       BOOST_PP_EXPAND(         \
          MACRO,                \
          BOOST_PP_IF(          \
             n,                 \
             (x, y, z),         \
             (a, b, c)          \
          )                     \
       )                        \
       /**/

    SAMPLE(0) // expands to (a)(b)(c)
    SAMPLE(1) // expands to (x)(y)(z)