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,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: Victor Porton Newsgroups: comp.lang.ada Subject: Re: Convert an access to constant to access to variable Date: Sat, 05 Aug 2017 04:00:56 +0300 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: qrWnZLr+FAc2xoElQM2hng.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7Bit X-Complaints-To: abuse@aioe.org User-Agent: KNode/4.14.10 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:47599 Date: 2017-08-05T04:00:56+03:00 List-Id: Randy Brukardt wrote: > "Victor Porton" wrote in message > news:om2rph$18jt$1@gioia.aioe.org... >> What is the proper way to convert an access to constant to access to >> variable? (Yes, I know that then I need to be careful not to modify this >> "variable".) > > Well, it's not a proper conversion, so there isn't going to be a "proper" > way. > >> Maybe Unchecked_Conversion? > > That's one possibility. > >> But: >> >> 1. Is Unchecked_Conversion guaranteed by the standard to work well in >> this case? > > I think so. The rules for what must work are found in 13.9(5-10). I > suppose a compiler could represent access-to-constant and > access-to-variable differently. > > In any case, your program is erroneous if it tries to write a constant. > (But you knew that.) > >> 2. Is there a simpler way than Unchecked_Conversion? > > The alternative (assuming the access-to-variable is a general access type) > is to use 'Access to convert: > > Ptr.all'Access > > Nope, that won't work, because Ptr.all is a constant, and the result here > has to be a variable in order to assign it into an access-to-variable. > > You could certainly use Address_to_Access_Conversions, but whether that's > "simpler" is in the eye of the beholder. (It also requires an > instantiation, and usually an extra type conversion.) Address_to_Access_Conversions seems not to solve my problem, because function To_Address(Value : Object_Pointer) return Address accepts only variable pointers not constant pointers. So I am unable to do anything with my constant pointer. It's bad! I can dealt with this only with a horrible workaround. Hard to believe that there is no any way in Ada2012 to convert an access to constant to an access to variable. I'm sure many people wanted this. How such a feature may be missing?! Should we develop and submit a language change proposal?! Maybe A'Unchecked_Variable? -- Victor Porton - http://portonvictor.org