I asked for a case, that is not an exceptional one. This one is an exception. A simple (type, qualifier) pair, where qualifier may be placed before the type it applies to.
Normally a type qualifier list only goes after the type it applies to, because it belongs to a declarator, which is a suffix to that type. Not only is this a result of C approximating context-free grammar, and permits very natural and intuitive “stacking”, but it’s even hard to imagine how it could be written otherwise without copious amount of parentheses.
For reasons unknown to me, but for which a plausible explanation I suggested in a post above, there is an exception added. In declaration specifiers, which completely covers your (type, qualifier) pair without further parsing, a rule for qualifiers duplicates that of storage class specifiers (like extern or auto).(1) An unintended consequence of this rule being added are “monstrosities” from the zoo above. Even something like this:int typedef x;
One note. I call that an exception, because I assume there is intentionality behind this. The intention would be allowing qualifiers to go before type in that special case. But this is nothing more than my assumption. Plain “laziness” without caring about allowing the prefix version would produce the same grammar, because it’s the easiest way to chain things. I prefer to believe that it was an exception added to allow people put things like const before types, but the alternative version is equally valid: unintended syntax, which happens to work in simple cases, becoming the convention.
I hope that resolves the confusion. Because a single sentence, tangentially relevant and uttered only as an introduction to a paragraph discussing another thing, a paragraph itself short and followed by two others, is taking considerable part of this thread already.
(1) C23 even dropped distinction between them in this context.