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 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: limited agregate and limited components default initialization Date: Mon, 2 Apr 2018 14:11:59 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <29943b13-00d1-443a-82f2-f55272770109@googlegroups.com> <12766e64-7641-45a0-8e76-8330a3b3c101@googlegroups.com> NNTP-Posting-Host: kQkuQcRDy1QFvWpyB1foYw.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 X-Notice: Filtered by postfilter v. 0.8.3 Content-Language: en-US Xref: reader02.eternal-september.org comp.lang.ada:51294 Date: 2018-04-02T14:11:59+02:00 List-Id: On 2018-04-02 13:25, Jean-Claude Rostaing wrote: > It works, so much for "impossible" dmitry. > > I probably read before the implementation you mentioned, I don't remember exactly. I saw something strange writing this. Shouldn't the expression function > function GET (Pointer : Pointer_Type) return Accessor_Type is > (if Pointer.Pointer = null or else POINTER.Pointer.Value = null then raise EXC_NULL_POINTER_ACCESS > else ACCESSOR_TYPE'(Data_Link => Pointer.Pointer.Value)); > be strictly equivalent to > function GET (Pointer : Pointer_Type) return Accessor_Type is > begin > if Pointer.Pointer = null or else POINTER.Pointer.Value = null then raise EXC_NULL_POINTER_ACCESS; > else > return ACCESSOR_TYPE'(Data_Link => Pointer.Pointer.Value); > end if; > end GET; > ? Yet no, the second is fine, the second raises at run time > raised CONSTRAINT_ERROR : pointers.adb:20 discriminant check failed You still cannot dereference you smart pointer without an explicit call to Get. You could just make Get returning an anonymous access to the target and be done with that. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de