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,5992229ab824d8f7 X-Google-Attributes: gid103376,public From: bobduff@world.std.com (Robert A Duff) Subject: Re: Q: on redefinition of "= Date: 1996/04/01 Message-ID: #1/1 X-Deja-AN: 145273835 references: <4jkj5sINN8d3@aleutian.cis.ohio-state.edu> <4joui6INNqej@snoopy.cis.ohio-state.edu> organization: The World Public Access UNIX, Brookline, MA newsgroups: comp.lang.ada Date: 1996-04-01T00:00:00+00:00 List-Id: In article <4joui6INNqej@snoopy.cis.ohio-state.edu>, david scott gibson wrote: >Thanks for the suggestion. However, I should have mentioned that the >type for which I'm redefining equality (My_Type above) is indeed a >tagged type. Oh, sorry. How about: function "="(X, Y: My_Type'Class) return Boolean is abstract; ^^^^^^ This does not override the predefined "=" for My_Type, but it will make most calls of "=" ambiguous, and thus illegal. The error message from your compiler might not be as friendly as you would like, if you do this. And you still have to worry about reemergence of predefined "=", which has been discussed at length in this newsgroup. You could re-define the primitive "=" to raise an exception. Then you get run-time checking, which isn't quite as nice as compile-time checking, but at least you get checking. And, for tagged types, predefined "=" doesn't "reemerge", which is nice. I guess you could do *both*. >... According to RM3.9.3(3), I believe I can only define an >abstract subprogram as a primitive operation of a tagged type if the >taggged type itself is abstract. Correct. >... Thus this strategy doesn't seem to >work. Correct. >...Admittedly what I'm trying to do is a bit strange, but I >thought the rules for redefining the equality operator were intended >to make something like this possible. Perhaps this sort of thing was >only intended for limited types. Any other ideas anyone? Making the type limited is often a good idea. Do you *really* want ":=" on this type? Would it not be better to have a Copy or Clone subprogram, or some such thing? - Bob