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=-0.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Received: by 2002:a5e:8346:: with SMTP id y6-v6mr4548329iom.7.1539980752215; Fri, 19 Oct 2018 13:25:52 -0700 (PDT) X-Received: by 2002:aca:3094:: with SMTP id w142-v6mr617484oiw.0.1539980752055; Fri, 19 Oct 2018 13:25:52 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!border1.nntp.ams1.giganews.com!nntp.giganews.com!news.uzoreto.com!feeder1.cambriumusenet.nl!feed.tweak.nl!209.85.166.216.MISMATCH!x98-v6no100461ita.0!news-out.google.com!n199-v6ni113itn.0!nntp.google.com!z5-v6no100691ite.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Fri, 19 Oct 2018 13:25:51 -0700 (PDT) In-Reply-To: <0a680981-7b14-4b72-b51a-b06ab7822d54@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=146.5.2.28; posting-account=lJ3JNwoAAAAQfH3VV9vttJLkThaxtTfC NNTP-Posting-Host: 146.5.2.28 References: <0a680981-7b14-4b72-b51a-b06ab7822d54@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <1a143584-e575-47b2-ab99-f5b6c3382add@googlegroups.com> Subject: Re: A function that cannot be called? From: Shark8 Injection-Date: Fri, 19 Oct 2018 20:25:52 +0000 Content-Type: text/plain; charset="UTF-8" Xref: reader02.eternal-september.org comp.lang.ada:54663 Date: 2018-10-19T13:25:51-07:00 List-Id: On Friday, October 19, 2018 at 12:19:07 PM UTC-6, marc...@earthlink.net wrote: > On Thursday, October 18, 2018 at 8:14:32 AM UTC-4, G.B. wrote: > > There is a type declaration, I rememberd, in Ada, that > > does not allow any object of the type to be declared. > > I think the type should be along the lines below. Is > > this correct? > > > > Then, a function that nominally returns objects of > > this type should be impossible to call. Is this right, > > too? > > > > generic > > type T(<>) is limited private; -- gen. arg. type > > > > package What is > > > > type Void (<>) is private; > > > > function Impossible (X : T) return Void; > > > > private > > > > package Inner is > > type Void (<>) is private; > > private > > type Void is record > > null; > > end record; > > end Inner; > > > > type Void is new Inner.Void; > > > > end What; > > > > (If current Ada could still pass by reference in both call > > direction and return direction, then I'd have added *limited* > > to the Voids' declarations. Without it, a body of Impossible > > is closer to becoming possible by using Convention => Ada > > together with an 'Address clause on a Result object. I think.) > > Before Ada 95 or Ada 2005 it would have been a package > spec that had the following (with P1,P2,etc. being valid types): > > type Not_Objects_Just_for_Parameters is limited private; > function Return_A_Corresponding_Value(p1:t1;p2:t2;etc...) > return Not_Objects_Just_for_Parameters; > procedrure Force_Call_Of_Function_1 > (Function_Call:Not_Objects_Just_for_Parameters; > Other_Param3:p3;etc...); > procedrure Force_Call_Of_Function_2 > (Function_Call:Not_Objects_Just_for_Parameters; > Other_Param4:p4;etc...); > > I miss that way of forcing/ensuring new execution of some > code as a prerequisite of use of a subprogram. ;-( > Being able to hang on to the result of such a function > by using renames wrecks this usage. Isn't there a similar effect that can be had via Type Just_For_Parameters(<>) is limited private; Function Get_Param return Just_For_Parameters; --... PRIVATE Type Stub_Record is null record; Type Just_For_Parameters is not null access Stub_Record with Size => 0; --... Or am I misunderstanding what you're getting at? (Quite possible as I've never had occasion to use Size 0 "access"-types.)