3.7.1 Discriminant Constraints
Name Resolution Rules
of a named discriminant_association
shall resolve to denote a discriminant of the subtype being constrained;
the discriminants so named are the associated
of the named association.
positional association, the associated discriminant
is the one
occurred in the corresponding position in the known_discriminant_part
that defined the discriminants of the subtype being constrained.
is only allowed in a subtype_indication
denotes either an unconstrained discriminated subtype, or an unconstrained
access subtype whose designated subtype is an unconstrained discriminated
subtype. However, in the case of an access subtype, a discriminant_constraint
is legal only if any dereference of a value of the access type is known
to be constrained (see 3.3
). In addition to
the places where Legality Rules normally apply (see 12.3
these rules apply also in the private part of an instance of a generic
This paragraph was
with an unconstrained discriminated subtype if each
discriminant value belongs to the subtype of the corresponding discriminant.
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.
For the elaboration of a discriminant_constraint
in the discriminant_association
are evaluated in an arbitrary order and converted to the type of the
associated discriminant (which can raise Constraint_Error — see
); the expression
of a named association is evaluated (and converted) once for each associated
The result of each evaluation and conversion
is the value imposed by the constraint for the associated discriminant.
NOTE The rules of the language ensure
that a discriminant of an object always has a value, either from explicit
or implicit initialization.
types declared above in subclause 3.7):
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 5
Illegal : Square; -- illegal, a Square has to be constrained
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe