 <p>Generally, function like macro can be used to prevent unintentional macro expansion.<br> For example, assuming that we have the following macro call:</p> <pre><code>BOOST_PP_CAT( BOOST_PP_ITERATION, _DEPTH ) </code></pre> <p>and we expect this will be expanded into <code>BOOST_PP_ITERATION_DEPTH</code>.<br> However, if <code>BOOST_PP_ITERATION</code> is an object like(non-functional) macro, it will be expanded to its own definition before the token <code>BOOST_PP_ITERATION_DEPTH</code> is generated by concatenation.</p>