32 lines
964 B
Ada
32 lines
964 B
Ada
|
-- { dg-do compile }
|
||
|
with Ada.Tags.Generic_Dispatching_Constructor; use Ada.Tags;
|
||
|
package body abstract1 is
|
||
|
|
||
|
function New_T (Stream : not null access Root_Stream_Type'Class)
|
||
|
return T'Class is
|
||
|
function Construct is
|
||
|
new Generic_Dispatching_Constructor (T, Root_Stream_Type'Class, Input);
|
||
|
E : constant String := String'Input (Stream);
|
||
|
I : constant Tag := Internal_Tag (E);
|
||
|
|
||
|
begin
|
||
|
return Construct (I, Stream);
|
||
|
end New_T;
|
||
|
|
||
|
function Input (Stream : not null access Root_Stream_Type'Class)
|
||
|
return IT is
|
||
|
begin
|
||
|
return O : IT do
|
||
|
Integer'Read (Stream, O.I);
|
||
|
end return;
|
||
|
end Input;
|
||
|
|
||
|
function Input (Stream : not null access Root_Stream_Type'Class)
|
||
|
return FT is
|
||
|
begin
|
||
|
return O : FT do
|
||
|
Float'Read (Stream, O.F);
|
||
|
end return;
|
||
|
end Input;
|
||
|
end abstract1;
|