From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,INVALID_DATE autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,9cfa83146b0781ed X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 1994-11-14 22:34:03 PST Newsgroups: comp.lang.ada Path: nntp.gmd.de!xlink.net!howland.reston.ans.net!spool.mu.edu!uwm.edu!lll-winken.llnl.gov!noc.near.net!inmet!dsd!stt From: stt@dsd.camb.inmet.com (Tucker Taft) Subject: Re: Overloading for T and T'Class Message-ID: Sender: news@inmet.camb.inmet.com Organization: Intermetrics, Inc. References: <3a6goo$j7s@starbase.neosoft.com> Date: Tue, 15 Nov 1994 02:35:49 GMT Date: 1994-11-15T02:35:49+00:00 List-Id: In article <3a6goo$j7s@starbase.neosoft.com>, David Weller wrote: >In article , >John Volan wrote: >>In Ada9X, is it legal to overload the same subprogram name for both >>some tagged type T and its class-wide type T'Class? For example: >> >> package P is >> type T is tagged ... ; >> procedure Op (X : in out T); >> procedure Op (X : in out T'Class); >> ... >> end P; >> > >My neophyte language-lawerly sense says "No", you can't do this. ... Bzzz! We will repeat the entire question for the other team... Seriously, though, this is a subtle one. You can declare the subprograms, but you will have trouble writing a call on either one that is not ambiguous. An earlier version of the 9X proposals made it illegal to declare two subprograms that were indistinguishable from a call point of view. However, this rule added significantly to the complexity of the conformance rules, without producing commensurate benefits (in our estimation). > ... >I think GNAT (at the moment) permits this, further confusing the >issue. > >Your example was similar to an issue discussed during a presentation >I made on the first version of the Booch COmponents at Tri-Ada. The above is legal, though a call would generally be ambiguous. Actually, the class-wide operation can be called, provided the actual parameter is of some descendant of T other than T or T'Class itself. Furthermore, the primitive operation once inherited by some descendant (say T2) would be callable, presuming T2 is declared in some other package. Hence, it is conceivable that the above might have some use, presuming no one wanted to use either one with T or T'Class, but rather with other descendants of T such as, say, T2 or T2'Class. -Tucker Taft stt@inmet.com