Go to the first, previous, next, last section, table of contents.


5.2.3.1 Simple Type Names

The syntax of simple-type-name is as in C++. The nonterminals typedef-non-class-or-enum-name, typedef-enum-name, and original-enum-name are all previously-declared identifiers (see section 4.9 Context-Dependent Keywords). See section 5.2.3.2 Class and Namespace Names for the syntax of complete-class-name and nested-name-specifier.

simple-type-name ::= complete-type-name 
        | [ :: ] nested-name-specifier template template-class-instance
        | built-in-type-name
complete-type-name ::= complete-class-name
        | complete-non-class-type-name
complete-non-class-type-name ::=  [ :: ] [ nested-name-specifier ] non-class-type-name
non-class-type-name ::= enum-name | typedef-non-class-or-enum-name
built-in-type-name ::= char | short | int | long | signed | unsigned | float | double
        | bool | void
enum-name ::= original-enum-name | typedef-enum-name

See Section r.7.1.6 of [Stroustrup91] for restrictions on the use of long, short, double, signed, unsigned, and char.

Each of the built-in types of C++ is automatically associated with a trait of the same name in Larch/C++. This trait defines the abstract values of the C++ values of such types. For example, the abstract values int is modeled by abstract values of sort int in trait int. See section 11 Built-in Types for the details on how the abstract values of these types are modeled in LSL.


Go to the first, previous, next, last section, table of contents.