Справочное руководство по C++ | страница 41
Если спецификация-типа отсутствует в описании, она считается заданной как int.
>имя-простого-типа:
> полное-имя-класса
> уточненное-имя-типа
> char
> short
> int
> long
> signed
> unsigned
> float
> double
> void
Вместе с int нельзя задавать более одного служебного слова long или short. Они могут использоваться и поодиночке, тогда считается, что тип есть int. Служебное слово long может появиться вместе с double. Вместе с char, short, int или long нельзя задавать более одного служебного слова signed или unsigned. Они могут использоваться и поодиночке, тогда считается, что тип есть int. Спецификация signed указывает, что объекты типа char и битовые поля являются знаковыми, для других целочисленных типов эта спецификация избыточна.
Конструкции спецификация-класса и спецификация-перечисления определяются в §R.9 и §R.7.2 соответственно.
>спецификация-сложного-типа:
> служебное-слово-класса имя-класса
> служебное-слово-класса идентификатор
>служебное-слово-класса:
> class
> struct
> union
Если задан идентификатор, спецификация-сложного-типа описывает его как имя-класса (см. §R.9.1).
Если определено имя, которое описывается с помощью спецификации union, то оно должно быть определено как объединение. Если определено имя, которое описывается с помощью спецификации class, то оно должно быть определено с помощью спецификаций class или struct. Если определено имя, которое описывается с помощью спецификации struct, оно должно быть определено с помощью спецификации class или struct. Имена вложенных типов (§R.9.7) должны уточняться именем объемлющего класса:
>уточненное-имя-типа:
> имя-typedef
> имя-класса :: уточненное-имя-типа
>полное-имя-класса:
> уточненное-имя-класса
> :: уточненное-имя-класса
>уточненное-имя-класса:
> имя-класса
> имя-класса :: уточненное-имя-класса
Имя, уточненное именем-класса должно быть типом, определенным в этом классе или в базовом классе этого класса. Как обычно, имя, описанное в производном классе, делает невидимыми члены с этим именем из базовых классов (см. §R.3.2).
R.7.2 Описание перечисления
Перечисление является отдельным целочисленным типом (§R.3.6.1) с константами-именами. Его имя в своей области видимости становится конструкцией имя-перечисления, т.е. служит зарезервированным словом.
>имя-перечисления:
> идентификатор
>спецификация-перечисления:
> enum идентификатор >opt { список-перечисления }
>список-перечисления:
> элемент-перечисления
> список-перечисления, элемент-перечисления
>элемент-перечисления:
> идентификатор