No, macros operate on syntax only. If there is a matcher that is ($arg:expr, &str), the latter half of that expects a literal &str to be provided — it does not indicate that $arg is a string.
Note to OP: you have to be careful with closure abstractions, however. If you intend to use the macro with expressions that contain some specific kinds of control flow that only make sense, or change meaning, in a given context, then adding a closure will change the semantics of the code or cause it to fail to compile. Concretely, you won't be able to use it with expressions that contain break, continue, return, and ?.