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
next 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