A primitive can be a parenthesized term. A primitive can also be an id-expression, which is an unqualified-id or qualified-id naming a formal parameter, a global variable, a data member, a member function, or an identifier introduced by a quantifier. Finally, a primitive can be the application of a trait function to arguments, or an lcpp-primary.
primitive ::=(
term)
| id-expression | fcnId(
term-list)
| lcpp-primary fcnId ::= identifier
The sort of a parenthesized term is the sort of the enclosed term. Its meaning is the meaning of the term.
A fcnId is a trait function identifier;
not a C++ function identifier.
The sort of a term of the form fcnId (
term-list )
is given by the used traits as follows.
Let the sorts of the terms in term-list be S1,...,Sn
;
then there must be a unique trait function named with the identifier
of the fcnId, with signature S1,...,Sn -> T
;
and if so the sort of the whole primitive term is T
.
That is, the sort of the whole primitive term is
the return sort of the trait function overloading that matches the sorts
of the arguments.
Examples of primitives include (i + 1)
,
i
, and isEmpty(s1 \U s2)
.
Go to the first, previous, next, last section, table of contents.