TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

- (1)
- A discriminant_constraint specifies the values of the discriminants for a given discriminated type.

(2) discriminant_constraint ::= (discriminant_association {, discriminant_association}) (3) discriminant_association ::= [discriminant_selector_name {| discriminant_selector_name} =>] expression

- (4)
- A discriminant_association is said to be named if it has one or more discriminant_selector_names; it is otherwise said to be positional. In a discriminant_constraint, any positional associations shall precede any named associations.

- (5)
- Each selector_name of a named discriminant_association shall resolve to denote a discriminant of the subtype being constrained; the discriminants so named are the associated discriminants of the named association. For a positional association, the associated discriminant is the one whose discriminant_specification occurred in the corresponding position in the known_discriminant_part that defined the discriminants of the subtype being constrained.
- (6)
- The expected type for the expression in a discriminant_association is that of the associated discriminant(s).

- (7)
- A discriminant_constraint is only allowed in a subtype_indication whose subtype_mark denotes either an unconstrained discriminated subtype, or an unconstrained access subtype whose designated subtype is an unconstrained discriminated subtype.
- (8)
- A named discriminant_association with more than one selector_name is allowed only if the named discriminants are all of the same type. A discriminant_constraint shall provide exactly one value for each discriminant of the subtype being constrained.
- (9)
- The expression associated with an access discriminant shall be of a type convertible to the anonymous access type.

- (10)
- A discriminant_constraint is compatible with an unconstrained discriminated subtype if each discriminant value belongs to the subtype of the corresponding discriminant.
- (11)
- A composite value satisfies a discriminant constraint if and only if each discriminant of the composite value has the value imposed by the discriminant constraint.
- (12)
- For the elaboration of a discriminant_constraint, the expressions in the discriminant_associations are evaluated in an arbitrary order and converted to the type of the associated discriminant (which might raise Constraint_Error -- see 4.6); the expression of a named association is evaluated (and converted) once for each associated discriminant. The result of each evaluation and conversion is the value imposed by the constraint for the associated discriminant.
- NOTES

- (13)
- (54) The rules of the language ensure that a discriminant of an object
always has a value, either from explicit or implicit initialization.

- (14)
*Examples (using types declared above in clause 3.7):*

(15) Large : Buffer(200);-- constrained, always 200 characters-- (explicit discriminant value)Message : Buffer;-- unconstrained, initially 100 characters-- (default discriminant value)Basis : Square(5);-- constrained, always 5 by 5Illegal : Square;-- illegal, a Square has to be constrained

TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

-- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.chCopyright statement

Page last generated: 95-03-12