It should complain. The reason is that if it doesn't (and interprets an unmatched `)` as a literal `)`), then the semantics will change depending on whether it occurs before a `$(`. Thus, you will silently change the semantics of unmatched `)` when wrapping existing text in a macro.