4.9.1 Statically Matching Constraints and Subtypes
Static Semantics
A constraint
statically matches
another constraint if:
both are null constraints;
both are static and have equal corresponding bounds
or discriminant values;
A subtype
statically matches
another subtype of the same type if they have statically matching constraints,
all predicate specifications that apply to them come from the same declarations,
Nonblocking aspects have the same value, global aspects statically match,
Object_Size (see
13.3) has been specified
to have a nonconfirming value for either both or neither, and the nonconfirming
values, if any, are the same, and, for access subtypes, either both or
neither exclude null. Two anonymous access-to-object subtypes statically
match if their designated subtypes statically match, and either both
or neither exclude null, and either both or neither are access-to-constant.
Two anonymous access-to-subprogram subtypes statically match if their
designated profiles are subtype conformant, and either both or neither
exclude null.
Two ranges of the same type
statically
match if both result from the same evaluation of a
range,
or if both are static and have equal corresponding bounds.
A constraint is
statically
compatible with a scalar subtype if it statically matches the constraint
of the subtype, or if both are static and the constraint is compatible
with the subtype.
A constraint is
statically compatible
with an access or composite subtype if it statically matches the constraint
of the subtype, or if the subtype is unconstrained.
Two
statically matching subtypes are statically compatible with each other.
In addition, a subtype
S1 is statically compatible with a subtype
S2 if:
the constraint of S1 is statically compatible
with S2, and
if S2 excludes null, so does S1,
and
either:
all predicate specifications that
apply to S2 apply also to S1, or
both subtypes are static, every
value that satisfies the predicates of
S1 also satisfies the predicates
of
S2, and it is not the case that both types each have at least
one applicable predicate specification, predicate checks are enabled
(see
11.4.2) for
S2, and predicate
checks are not enabled for
S1.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe