3.6.1 Index Constraints and Discrete Ranges
determines the range of possible values for every index of an array subtype,
and thereby the corresponding array bounds.
Name Resolution Rules
with an unconstrained array subtype if and only
if the index range defined by each discrete_range
is compatible (see 3.5
) with the corresponding
If any of the discrete_range
defines a null range, any array thus constrained is a null array
having no components.
An array value satisfies
if at each index position the array value and the index_constraint
have the same index bounds.
Ramification: There is no need to define
compatibility with a constrained array subtype, because one is not allowed
to constrain it again.
NOTE 2 Even if an array value does
not satisfy the index constraint of an array subtype, Constraint_Error
is not raised on conversion to the array subtype, so long as the length
of each dimension of the array value and the array subtype match. See
Examples of array
declarations including an index constraint:
Board : Matrix(1 .. 8, 1 .. 8); -- see 3.6
Rectangle : Matrix(1 .. 20, 1 .. 30);
Inverse : Matrix(1 .. N, 1 .. N); -- N can be nonstatic need not be static
Example of array
declaration with a constrained array subtype:
My_Schedule : Schedule; -- all arrays of type Schedule have the same bounds
Example of record
type with a component that is an array:
type Var_Line(Length : Natural) is
Image : String(1 .. Length);
Null_Line : Var_Line(0); -- Null_Line.Image is a null array
Extensions to Ada 83
We allow the declaration
of a variable with a nominally unconstrained array subtype, so long as
it has an initialization expression to determine its bounds.
Wording Changes from Ada 83
The rules given in RM83-3.6.1(5,7-10), which
define the bounds of an array object, are redundant with rules given
elsewhere, and so are not repeated here. RM83-3.6.1(6), which requires
that the (nominal) subtype of an array variable be constrained, no longer
applies, so long as the variable is explicitly initialized.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe