3.6.1 Index Constraints and Discrete Ranges
An 
index_constraint 
determines the range of possible values for every index of an array subtype, 
and thereby the corresponding array bounds. 
 
Syntax
Name Resolution Rules
Legality Rules
Static Semantics
Dynamic Semantics
An 
index_constraint 
is 
compatible 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 
index subtype. 
If any of the 
discrete_ranges 
defines a null range, any array thus constrained is a 
null array, 
having no components. 
An array value 
satisfies 
an 
index_constraint 
if at each index position the array value and the 
index_constraint 
have the same index bounds. 
 
52  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 
4.6. 
 
Examples
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 need not be static  
Filter    : Bit_Vector(0 .. 31);
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
   record
      Image : String(1 .. Length);
   end record;
Null_Line : Var_Line(0);  --  Null_Line.Image is a null array
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe