(discriminant_specification {; discriminant_specification})
defining_identifier_list : subtype_mark [:= default_expression]
| defining_identifier_list : access_definition [:= default_expression]
record
Pos : Buffer_Size := 0;
Value : String(1 .. Size);
end record;
record
Mat : Matrix(1 .. Rows, 1 .. Columns); -- see 3.6
end record;
record
Left : Square(Number);
Right : Square(Number);
end record;
record
Content : Integer;
-- no component depends on the discriminant
end record;
(discriminant_association {, discriminant_association})
[discriminant_selector_name {| discriminant_selector_name} =>] expression
-- (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