with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; package Opt41_Pkg is type Enum is (One, Two, Three, Four, Five, Six); type Rec (D : Enum) is record case D is when One => I : Integer; when Two | Five | Six => S : Unbounded_String; case D is when Two => B : Boolean; when others => null; end case; when others => null; end case; end record; type Rec_Ptr is access all Rec; function Rec_Write (R : Rec) return Unbounded_String; function Rec_Read (Str : String_Access) return Rec; end Opt41_Pkg;