Variadic macros with zero arguments
As for the updated question, by the use of auxiliary macro VA_ARGS
like
the following, the arguments will be expanded as expected.
#define VA_ARGS(...) , ##__VA_ARGS__
#define CALL(f,...) FN(f)->call((ref(new LinkedList()) VA_ARGS(__VA_ARGS__)))
If you're using gcc/g++ there is a way:
#define CALL(f,...) FN(f)->call((ref(new LinkedList()), ## __VA_ARGS__))
From the fine manual:
[...] if the variable arguments are omitted or empty, the `##' operator causes the preprocessor to remove the comma before it.
So gcc has an extension/hack specifically for the problem you are facing.