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: fac41,b87849933931bc93 X-Google-Attributes: gidfac41,public X-Google-Thread: 109fba,b87849933931bc93 X-Google-Attributes: gid109fba,public X-Google-Thread: 103376,b87849933931bc93 X-Google-Attributes: gid103376,public X-Google-Thread: f43e6,b87849933931bc93 X-Google-Attributes: gidf43e6,public X-Google-Thread: 1108a1,b87849933931bc93 X-Google-Attributes: gid1108a1,public X-Google-Thread: 114809,b87849933931bc93 X-Google-Attributes: gid114809,public From: Ken Garlington Subject: Re: OO, C++, and something much better! Date: 1997/01/13 Message-ID: <32DA822A.2FD8@lmtas.lmco.com>#1/1 X-Deja-AN: 209557309 references: content-type: text/plain; charset=us-ascii organization: Lockheed Martin Tactical Aircraft Systems mime-version: 1.0 newsgroups: comp.lang.c++,comp.lang.smalltalk,comp.lang.eiffel,comp.lang.ada,comp.object,comp.software-eng x-mailer: Mozilla 3.01 (Win95; U) Date: 1997-01-13T00:00:00+00:00 List-Id: Don Harrison wrote: > > Robert Dewar writes: > > :I have been trying to think of a safe way of doing this sort of thing but > :thus far haven't thought of any. :)" > : > : > :Well there obviously is no safe way of doing something whose entire purpose > :is to allow unsafe operations! > > Yes, these mechanisms are inherently unsafe but their purpose is to allow > different views of the same data. There are different ways of acheiving > that and some ways are safer than others. For example, UNCHECKED_CONVERSION > is safer than overlaying because the data is copied thus protecting the > original object. Why does UC require copying? The following code works fine with my copy of GNAT, and I've used the same technique on Ada 83 compilers as well... with Unchecked_Conversion; with Ada.Text_IO; procedure Test_UC is type My_Integer is new Integer; function To_Int is new Unchecked_Conversion ( My_Integer, Integer ); Foo : My_Integer := 7; Bar : constant Integer := 0; begin To_Int(Foo) := Bar; Ada.Text_IO.Put_Line(My_Integer'Image(Foo)); end;