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,e08ffaff681705c X-Google-Attributes: gid103376,public From: dewar@cs.nyu.edu (Robert Dewar) Subject: Re: access aliased obstacle Date: 1996/07/09 Message-ID: #1/1 X-Deja-AN: 167993541 references: <4rsmn6$hvc@news1.delphi.com> organization: Courant Institute of Mathematical Sciences newsgroups: comp.lang.ada Date: 1996-07-09T00:00:00+00:00 List-Id: Laurent said " A discriminated record isn't a C union type, because the discriminant is stored in the record in Ada (accessible for reading), and run-time checks are made on the discriminant when you access variant parts. The pragma Unchecked_Union makes a simple Ada discriminated record type match exactly a C union (discriminant not stored, no checks). It is not in the RM, but all vendors agreed to implement it. It is documented in the GNAT file "features" I think (or gnatinfo.txt)." Not quite right, there is no reason why a discriminant in a variant record should be stored "in the record" in Ada, that is just a (common) implementation choice. In fact if you are using sub types extensively it is attractive to choose an alternative representation where the discriminants are stored separately, However, the point about discriminant checks is right of course (although if one had an implementation which stored discriminants separately, you would get almost what you wanted simply by suppressing these checks).