12.5.2 Formal Scalar Types
{
AI95-00442-01}
A
formal scalar type is one defined by any of the
formal_type_definitions
in this subclause. [The category determined for a formal scalar type
is the category of all discrete, signed integer, modular, floating point,
ordinary fixed point, or decimal types.]
Proof: {
AI95-00442-01}
The second rule follows from the rule in
12.5
that says that the category is determined by the one given in the name
of the syntax production. The effect of the rule is repeated here to
give a capsule summary of what this subclause is about.
Ramification: {
AI95-00442-01}
The “category of a type” includes any classes that the type
belongs to.
Syntax
formal_discrete_type_definition ::= (<>)
formal_signed_integer_type_definition ::= range <>
formal_modular_type_definition ::= mod <>
formal_floating_point_definition ::= digits <>
formal_ordinary_fixed_point_definition ::= delta <>
formal_decimal_fixed_point_definition ::= delta <>
digits <>
Legality Rules
The actual type for a formal scalar type shall not
be a nonstandard numeric type.
Reason: This restriction is necessary
because nonstandard numeric types have some number of restrictions on
their use, which could cause contract model problems in a generic body.
Note that nonstandard numeric types can be passed to formal derived and
formal private subtypes, assuming they obey all the other rules, and
assuming the implementation allows it (being nonstandard means the implementation
might disallow anything).
Wording Changes from Ada 95
{
AI95-00442-01}
We change to “determines a category” as that is the new terminology
(it avoids confusion, since not all interesting properties form a class).