comp.lang.ada
 help / color / mirror / Atom feed
* Resolution of Dispatching Operations
@ 1997-02-23  0:00 Matthew Heaney
  1997-02-24  0:00 ` Robert A Duff
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Matthew Heaney @ 1997-02-23  0:00 UTC (permalink / raw)



I have a question about the rules for resolution of (dispatching) operations.

I have a type with 2 operations that differ only with respect to whether
the arguments are class-wide or specific:

procedure Op (L : in T; R : in out T'Class);

procedure Op (L : in T'Class; R : in out T);


If I'm in a context where I have 2 class-wide objects and I call Op, which
version of Op gets called?  Like this

declare
   O1, O2 : T'Class;
begin
   Op (O1, O2);
end;

On my compiler, the first version gets called, but I have no idea why that
one would be favored over the other.

My expectation is that at some point, either at compile-time or at
run-time, I would get an error that says the compiler couldn't figure out
which operation I meant.  What am I missing?

Here is the code:

-- STX
package P is

   type T is tagged limited null record;

   procedure Op (L : in T;  R : in out T'Class);

   procedure Op (L : in T'Class;  R : in out T);

end;


with Ada.Text_IO; use Ada.Text_IO;
package body P is

   procedure Op (L : in T; R : in out T'Class) is
   begin
      Put_Line ("Op T, T'Class");
   end;

   procedure Op (L : in T'Class;  R : in out T) is
   begin
      Put_Line ("Op T'Class, T");
   end;

end;


with P;
procedure test_p is

   procedure Q (L : in P.T'Class; R : in out P.T'Class) is
   begin
      P.Op (L, R);
   end;

   O1, O2 : P.T;

begin
   Q (P.T'Class (O1), P.T'Class (O2));
end;
-- ETX

--------------------------------------------------------------------
Matthew Heaney
Software Development Consultant
<mailto:matthew_heaney@acm.org>
(818) 985-1271




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~1997-02-26  0:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-02-23  0:00 Resolution of Dispatching Operations Matthew Heaney
1997-02-24  0:00 ` Robert A Duff
1997-02-25  0:00 ` Norman H. Cohen
1997-02-26  0:00 ` Tucker Taft

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox