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=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,1038b3dc09d106c2 X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2001-09-04 14:30:28 PST Path: archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.gv.tsc.tdk.com!falcon.america.net!sunqbc.risq.qc.ca!newsfeed.mathworks.com!newsxfer.eecs.umich.edu!news.bu.edu!inmet!not-for-mail From: Tucker Taft Newsgroups: comp.lang.ada Subject: Re: Dispatching Example Date: Tue, 04 Sep 2001 17:30:01 -0400 Organization: AverStar (formerly Intermetrics) Burlington, MA USA Message-ID: <3B9547D9.BE2CC282@avercom.net> References: NNTP-Posting-Host: 192.168.24.34 Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: inmet2.burl.averstar.com 999639002 4465 192.168.24.34 (4 Sep 2001 21:30:02 GMT) X-Complaints-To: usenet@inmet2.burl.averstar.com NNTP-Posting-Date: 4 Sep 2001 21:30:02 GMT X-Mailer: Mozilla 4.75 [en] (X11; U; SunOS 5.7 sun4u) X-Accept-Language: en Xref: archiver1.google.com comp.lang.ada:12724 Date: 2001-09-04T21:30:02+00:00 List-Id: Ed Colbert wrote: > > Hi All, > > Below is a simplified example from Richard Riehle's & my course on Ada. > GNAT v3.13p says that the call Is_Item is an mbiguous expression, and > ObjectAda v 7.2 says the statement is illegal based on LRM 5.2(6). Both > Richard and I thought that the expression is tag indeterminate, LRM > 3.9.2(6), and would static resolved, LRM 3.9.2(19). Are Richard and I > missing something or are both compilers wrong? The call on Is_Item is ambiguous, even though one of the possible interpretations (the one returning type T1) violates 5.2(6). This is one of those cases where the overload resolution rules are less picky than the legality rules, which can be a bit confusing. ObjectAda is not being very helpful by telling you that one of the interpretations is illegal, without first telling you that the expression is considered ambiguous by the overloading rules. In any case, if only the Is_Item that returned type T1 were directly visible, the expression would not be ambiguous, and the call would be legal. It would involve a "dispatching on result" where the tag of "C" would determine which body of Is_Item were called. In general the overload resolution and legality rules relating to classwide assignment are confusing at best. We tried other rules, but they had worse problems, so I suppose the current rules are the best of a set of unpleasant alternatives. ObjectAda's error message was unfortunately only adding to the confusion. -Tucker Taft stt@avercom.net > > package Dispatching_Examples > is > type T1 is tagged private; > function Is_Item return T1; > > type T2 is new T1 with private; > function Is_Item return T2; > > private > -- full definition of T1 and T2 > type T1 is tagged null record; > type T2 is new T1 with null record; > end Dispatching_Examples; > > with Dispatching_Examples; > use Dispatching_Examples; > procedure Dispatching_Examples_Driver is > A, B : T1; -- simple variables > Q, R : T2; -- simple variables > C : T1'Class := A; -- class-wide variable > D : T2'Class := R ; -- class-wide variable > begin > C := Is_Item ; -- static resolution? > end Dispatching_Examples_Driver; -- -Tucker Taft stt@avercom.net http://www.avercom.net Chief Technology Officer, AverCom Corporation (A Titan Company) Bedford, MA USA (AverCom was formerly the Commercial Division of AverStar: http://www.averstar.com/~stt)