>>79
規格により、マクロの再帰は禁止されているので、あるマクロの展開中に
そのマクロが再び現れたとき、それは展開されない。だから、
BOOST_PP_CATが展開された結果にBOOST_PP_CATが含まれていても、
そのまま据え置かれる。
まったく別の問題だが、トークン'BOOST_PP_CAT'とトークン'('の連結は不定なので、
避けたほうが良い。この場合は単に並べておくだけで展開される。
以上を踏まえた、
#define TMP BOOST_PP_CAT(BOOST_PP_, TUPLE_ELEM) /* BOOST_PP_CAT以外のものを試してみる */
#define TMP2 TMP (2, 1, (void, int)) /* BOOST_PP_CAT を使わずに単にマクロと引数リストを並べる*/
TMP2 i;
はうまく int i; に展開された。