The easiest way is to use sequence iteration like this(it doesn't require boost):
#define PRIMITIVE_SEQ_ITERATE(...) __VA_ARGS__ ## _END
#define SEQ_ITERATE(...) PRIMITIVE_SEQ_ITERATE(__VA_ARGS__)
#define MACRO_EACH(seq) SEQ_ITERATE(MACRO_EACH_1 seq)
#define MACRO_EACH_1(...) ELEMMACRO(__VA_ARGS__) MACRO_EACH_2
#define MACRO_EACH_2(...) ELEMMACRO(__VA_ARGS__) MACRO_EACH_1
#define MACRO_EACH_1_END
#define MACRO_EACH_2_END
Which will call your ELEMMACRO
for each element in the sequence:
MACRO_EACH
(
(Elem1)
(Elem2)
(Elem3)
)
And will expand to this:
ELEMMACRO(Elem1)
ELEMMACRO(Elem2)
ELEMMACRO(Elem3)