letsboost::preprocessor(Let's Boost) を猿真似して BOOST_PP_REPEAT を使ったコードを書いたらエラーが出てしばしはまりました。
#define HAGE(n, _) int Hage ## n; BOOST_PP_REPEAT(5, HAGE, nil);
こんなのを書いたら、 BOOST_PP_REPEAT の第一引数を 2 以上にした時にエラー(C2365)が大量に。変数の多重定義だなんて、そんなはずはっ!
悩みながら公式のリファレンス BOOST_PP_REPEAT を見たら、サンプルソースがちょっと違う。
#define DECL(z, n, text) text ## n = n; BOOST_PP_REPEAT(5, DECL, int x)
どうやら、 BOOST_PP_REPAT に渡したマクロの第一引数には、現在の番号ではなく繰り返しの回数が入るらしい。つまり最初に自分が書いたコードは以下のように展開されていたみたいです。
int Hage5; int Hage5; int Hage5; ...
orz
ということで HAGE マクロの引数を上記サンプルのように変えたところ、正常に動作してくれました。めでたしめでたし。というか、最初に公式のドキュメント読めと。