BOOST_PP の中身を展開

VisualStudio の場合、/EP オプションを追加するとプリプロセスが展開されて出力されます。
プロジェクトを使用している場合、
[プロジェクトのプロパティ]→[C/C++]→[プリプロセッサ]→[行番号の前処理の抑制]

[いいえ]→[はい(/EP)]
に変更します。

#include <boost/preprocessor/arithmetic/mod.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/control/expr_iif.hpp>
#include <boost/preprocessor/control/iif.hpp>
#include <boost/preprocessor/facilities/is_empty.hpp>
#include <boost/preprocessor/logical/not.hpp>
#include <boost/preprocessor/repetition/enum_shifted.hpp>

#define FIZZBUZZ_OP(z, n, d)    \
    FIZZBUZZ_OP_I(              \
        BOOST_PP_CAT(FIZZBUZZ_OP_II(n, 3, FIZZ),    \
                     FIZZBUZZ_OP_II(n, 5, BUZZ)),   \
        n                                           \
    )
#endif

#define FIZZBUZZ_OP_I(t, n)    \
    BOOST_PP_IIF(BOOST_PP_IS_EMPTY(t), n, t)
    
#define FIZZBUZZ_OP_II(m, n, t)    \
    BOOST_PP_EXPR_IIF( BOOST_PP_NOT( BOOST_PP_MOD(m, n) ), t)

BOOST_PP_ENUM_SHIFTED(101, FIZZBUZZ_OP, _)

出力:

1 , 2 , FIZZ , 4 , BUZZ , FIZZ , 7 , 8 , FIZZ , BUZZ , 11 , 
FIZZ , 13 , 14 , FIZZBUZZ , 16 , 17 , FIZZ , 19 , BUZZ , FIZZ , 
22 , 23 , FIZZ , BUZZ , 26 , FIZZ , 28 , 29 , FIZZBUZZ , 31 , 
32 , FIZZ , 34 , BUZZ , FIZZ , 37 , 38 , FIZZ , BUZZ , 41 , FIZZ , 
43 , 44 , FIZZBUZZ , 46 , 47 , FIZZ , 49 , BUZZ , FIZZ , 52 , 53 , 
FIZZ , BUZZ , 56 , FIZZ , 58 , 59 , FIZZBUZZ , 61 , 62 , FIZZ , 64 , 
BUZZ , FIZZ , 67 , 68 , FIZZ , BUZZ , 71 , FIZZ , 73 , 74 , FIZZBUZZ 
, 76 , 77 , FIZZ , 79 , BUZZ , FIZZ , 82 , 83 , FIZZ , BUZZ , 86 , 
FIZZ , 88 , 89 , FIZZBUZZ , 91 , 92 , FIZZ , 94 , BUZZ , FIZZ , 97 , 98
 , FIZZ , BUZZ


注意:
この場合、#include しているヘッダーファイルの中身も全て展開されるので必要のないヘッダーファイル(string や ostream等)はコメントアウトしておいた方がいいです。
そうしておかないと展開にすごい時間がかかります。


[参照]
http://d.hatena.ne.jp/DigitalGhost/20090929/1254235028