ISO C11 Standard (I only have access to a draft version, n1570.pdf) states in 6.2.1.8 (there is no such paragraph in C99 standard):
As a special case, a type name (which is not a declaration of an identifier) is considered to have a scope that begins just after the place within the type name where the omitted identifier would appear were it not omitted.
I am looking for any explanation of the following:
1) The name of the section (6.2.1) is "Scopes of identifiers". The wording of this paragraph is unclear to me: is a 'type name scope' a kind of scope, similar to, e.g. block scope, file scope, etc? Or is it the scope of the type name itself (in which case a further question is how can an object without a name have a scope and what is a possible use for such scope).
2) Where does this definition matter? More specifically, if it were changed to say that the scope of a type name starts immediately after the corresponding type name is complete, what would that affect? The only tokens that can follow the omitted identifier in the abstract declarator(=type name) are a few parentheses and a list of parameter names or array dimensions (with expressions inside) neither of which can refer to the type name in question since there is no identifier to reference. Why not wait till the declarator is complete?