package Discr46 is type Enum is (One, Two, Three); for Enum use (One => 1, Two => 2, Three => 3); type Rec1 (D : Boolean := False) is record case D is when False => null; when True => T : Integer; end case; end record; type Rec2 is record R : Rec1; C : Character; end record; type Arr is array (Enum) of Rec2; A : Arr; function F (Id : Enum) return Integer; end Discr46;