The Super attribute can be applied to objects of tagged types in order
to obtain a view conversion to the most immediate specific parent type.
It cannot be applied to objects of types without any ancestors.
type T1 is tagged null record;
procedure P (V : T1);
type T2 is new T1 with null record;
type T3 is new T2 with null record;
procedure P (V : T3);
procedure Call (
V1 : T1'Class;
V2 : T2'Class;
V3 : T3'Class) is
begin
V1'Super.P; -- Illegal call as T1 doesn't have any ancestors
V2'Super.P; -- Equivalent to "T1 (V).P;", a non-dispatching call
-- to T1's primitive procedure P.
V3'Super.P; -- Equivalent to "T2 (V).P;"; Since T2 doesn't
-- override P, a non-dispatching call to T1.P is
-- executed.
end;