Имена типов
В некоторых контекстах (например, при использовании операции явного преобразования типа) должны употребляться имена типов данных. По существу имя типа - это описание объекта данного типа, в котором опущено имя объекта.
имя_типа: спецификатор_типа абстрактный_описатель
абстрактный_описатель: пусто ( абстрактный_описатель )
* абстрактный_описатель абстрактный_описатель ( )
абстрактный_описатель [ константное_выражение ]
Чтобы избежать неоднозначности, в конструкции
( абстрактный_описатель )
абстрактный_описатель должен быть непустым. Благодаря этому ограничению в абстрактном_описателе можно однозначно определить позицию, в которой следовало указать идентификатор, если бы рассматриваемая конструкция являлась обычным описателем. Имя_типа в таком случае совпадает с типом гипотетического идентификатора. Например, конструкции
int int * int * [3] int (*) [3] int * () int (*) () int (* [3]) ()
именуют, соответственно, типы "целое", "указатель на целое", "массив длины три указателей на целое", "указатель на массив целых длины три", "функция, возвращающая указатель на целое", "указатель на функцию, возвращающую целое", "массив длины три указателей на функции, возвращающие целое".