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-specifiertemplate
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.