type | Type specifiers |
type-specifier ::= simple-type-specifier class-specifier enum-specifier elaborated-type-specifier cv-qualifier simple-type-specifier ::= [::] [ nested-name ::] type-name [::] nested-name :: template template-id bool char double float int long short signed unsigned void wchar_t type-name ::= class-name enum-name typedef-name typedef-name ::= identifier elaborated-type-specifier ::= class-key [::] [ nested-name ::] identifier class-key [::] [ nested-name ::] [template] template-id enum [::] [ nested-name ::] identifier typename [::] nested-name :: identifier typename [::] nested-name :: [template] template-id |
Type specifiers are used throughout C++: in declarations, type casts, new expressions, and so on. Although the syntax rules shown here are quite flexible, the semantic rules impose many limits. For example, the simple syntax rules permit short long as a type ( specifically , as a decl-specifier-seq ; see declaration ), but that combination of type specifiers is not permitted. See Chapter 2 for details about semantics for valid type specifiers.
class , const , declaration , declarator , enum , identifier , struct , template , typedef , typename , union , volatile , Chapter 2