comp.lang.ada
 help / color / mirror / Atom feed
From: mheaney@ni.net (Matthew Heaney)
Subject: Resolution of Dispatching Operations
Date: 1997/02/23
Date: 1997-02-23T00:00:00+00:00	[thread overview]
Message-ID: <mheaney-ya023680002302970035510001@news.ni.net> (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




             reply	other threads:[~1997-02-23  0:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-02-23  0:00 Matthew Heaney [this message]
1997-02-24  0:00 ` Resolution of Dispatching Operations Robert A Duff
1997-02-25  0:00 ` Norman H. Cohen
1997-02-26  0:00 ` Tucker Taft
replies disabled

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