generic type Data is private; package Iface1 is type Future is synchronized interface; type Any_Future is access all Future; procedure Get (This : in out Future; P : out Data) is abstract; procedure Set (This : in out Future; P : in Data) is abstract; type Reusable_Future is synchronized interface and Future; type Any_Reusable_Future is access all Reusable_Future'Class; end Iface1;