foo(const std::function& functor) { .... } #define MACRO_EXAMPLE(functor) foo(functor) int main() { int i = 0, j = 0; MACRO_EXAMPLE([
Add one more round of parenthesis:
MACRO_EXAMPLE(([i, j](){})); // ^ ^
Otherwise the part before , is interpreted as macro's first parameter, and the part after , is interpreted as the macro's second parameter.
,