#演算子のオペランドが展開されないことを利用してBBOOST_PP_IFやら何やらの遅延評価を
目指してるんだが、下のコードで、IGNORE(CAUSE_ERROR)はエラーにならないのに
IGNORE_X(CAUSE_ERROR)がエラーになるのはなぜだ?わかる人がいたら教えてくれ。

#define THREE_ARG_MACRO(x, y, z)
#define CAUSE_ERROR THREE_ARG_MACRO(foo) /* 展開されたらエラー */

#define EAT(_)
#define IGNORE(x) EAT(#x) /* 引数xを展開せずに飲み込む */
#define IGNORE_X(x) IGNORE(x) EAT(#x) /* 間接的にIGNOREを呼ぶ */

IGNORE(CAUSE_ERROR) /* ok */
IGNORE_X(CAUSE_ERROR) /* macro "THREE_ARG_MACRO" requires 3 arguments, but only 1 given */