Стандарт ISO C11 (у меня есть только доступ к черновику версии, n1570.pdf), указывается в 6.2.1.8 (такого стандарта нет в стандарте C99):
В качестве специального случая имя типа (которое не является объявлением идентификатор) считается областью, которая начинается сразу после место в пределах имени типа, в котором будет отображаться пропущенный идентификатор если бы он не был опущен.
Я ищу любое объяснение:
1) Название раздела (6.2.1) - "Области идентификаторов". Формулировка этого параграфа для меня неясна: является ли "область имен типов" своего рода областью, аналогичной, например, область видимости блока, объем файла и т.д.? Или это область самого имени типа (в этом случае еще один вопрос: каким образом объект без имени имеет область действия и что может быть использовано для такой области).
2) Где это определение имеет значение? Более конкретно, если бы оно было изменено, чтобы сказать, что область имени типа начинается сразу после завершения соответствующего имени типа, что это повлияет? Единственными токенами, которые могут следовать за пропущенным идентификатором в абстрактном declarator (= имя типа), являются несколько скобок и список имен параметров или размеры массива (с внутренними выражениями), ни один из которых не может ссылаться на указанное имя типа, поскольку существует нет идентификатора ссылки. Почему бы не дождаться завершения декларатора?