#define EVAL1(...) __VA_ARGS__
#define RECURSE() I am recursive, look: _RECURSE()()
#define _RECURSE() RECURSE
I expected:
EVAL1(RECURSE())
=> EVAL1(I am recursive, look: _RECURSE()())
=> EVAL1(I am recursive, look: RECURSE())
=> I am recursive, look: RECURSE()
=> I am recursive, look:I am recursive, look: _RECURSE()()
what I got:
EVAL1(RECURSE())
=> I am recursive, look: RECURSE()
Why is RECURSE() not expanded second time when it is passed as an argument to EVAL1?
Another way to achieve what I want is this:
#define EVAL1(...) __VA_ARGS__
#define EMPTY()
#define DEFER1(m) m EMPTY()
#define RECURSE() I am recursive, look: DEFER1(_RECURSE)()()
#define _RECURSE() RECURSE
EVAL1(RECURSE())
=> I am recursive, look: I am recursive, look: _RECURSE ()()
But I am not sure why this works.