package Expr_Func3 is

   type Obj_T is abstract tagged null record;

   type T is access all Obj_T'Class;

   function Slave (Obj : access Obj_T) return T is (T(Obj));

   function Optional_Slave (Obj : T) return T;

   procedure Dummy;

private

   function Optional_Slave (Obj : T) return T is
    (if Obj = null then null else Slave (Obj));

end Expr_Func3;