1with Ada.Streams; use Ada.Streams;
2package abstract1 is
3   type T is abstract tagged limited null record;
4   function Input (Stream : not null access Root_Stream_Type'Class) return T
5     is abstract;
6
7   function New_T (Stream : not null access Root_Stream_Type'Class)
8     return T'Class;
9
10   type IT is limited new T with record
11     I : Integer;
12   end record;
13   function Input (Stream : not null access Root_Stream_Type'Class) return IT;
14
15   type FT is limited new T with record
16     F : Float;
17   end record;
18   function Input (Stream : not null access Root_Stream_Type'Class) return FT;
19end abstract1;
20