As far as I understand the macro_rules engine, you can't go backwards once you've matched some tokens as a particular match type. You've already matched the argument as a literal, so it can never go back to being a tt (which is what's required to match an explicit part of a macro pattern).
Similarly, an ident can be matched as an expr, but never the other way around. Even if the expr is composed of only an identifier.
Right, ok. That explanation makes sense. I thought that by designating it as literal I would be helping the compiler (and myself!) by specifying the type more concretely. Oh well, I guess I just need a comment next to the macro saying why it's tt instead.