Macro invocations work fine without a space before the parens. It gets parsed differently – with the space, the expression passed to the macro is a tuple, without the space, multiple arguments are passed to the macro. In this case, since the `@ASSERT(cond,expr)` is the same as `@ASSERT cond expr`. Perhaps the confusion stems from the fact that if you write `@ASSERT cond, expr` the macro is invoked with a single argument that is a tuple expression.