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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,39cb793e32a5b7d9 X-Google-Attributes: gid103376,public From: stt@houdini.camb.inmet.com (Tucker Taft) Subject: Re: A question for compiler vendors/lang experts. redefinition of "=" Date: 1997/12/16 Message-ID: #1/1 X-Deja-AN: 298718510 Sender: news@inmet.camb.inmet.com (USENET news) References: <34964C63.F97005E6@netspace.net.au> X-Nntp-Posting-Host: houdini.camb.inmet.com Organization: Intermetrics, Inc. Newsgroups: comp.lang.ada Date: 1997-12-16T00:00:00+00:00 List-Id: Barry and Jackie Schiff (schiff@netspace.net.au) wrote: : Got one answer from a large compiler vendor when another vendor's : implementation implies otherwise. Looked in the Rationale and LRM and it : was hard to find a clear answer. So here is the question for all those : language experts out there: : package Foo is : type objects is abstract tagged record : Some_value : some_type; : end record; : type class_wide_pointers is access all objects'class; : function "="(left, right : access objects) return boolean; -- : Legal?? : end Foo; : The question: Is the redefinition of "=" shown above legal and if so : what are the semantics. Specifically, is "=" a dispatching primitive : operation or is it ambiguous with the predefined equality defined for : the class_wide_pointers type. It is a dispatching operation of type Objects. It does not override the predefined operator for type class_wide_pointers, whose profile is: function "="(left, right : class_wide_pointers) return boolean; However, essentially all cases where you use the function will be ambiguous. For example, if you "use" package Foo, then: x, y : class_wide_pointers; begin if x = y then ... is ambiguous, as is: procedure blah(a, b : objects) is begin if a'access = b'access then ... It is not easy to construct a case where a use of your operator won't be ambiguous with a use of the predefined "=" operator for a named access type. : -------------- : In my reading the LRM it seems to me that the spirit of access : parameters is that the above operation is a dispatching operation. I : have had a large Ada compiler vendor tell me that the above is : ambiguous. These are not incompatible statements. It is a dispatching operation, and almost all uses of it will be ambiguous. : ... While another compiler implements that above as a dispatching : operation. Can anyone point me to the definitive answer in the LRM. You are both right. : Thanks in advance. If it is not to much trouble could you email answer. Will do. : --Barry Schiff -- -Tucker Taft stt@inmet.com http://www.inmet.com/~stt/ Intermetrics, Inc. Burlington, MA USA