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.8 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM,PLING_QUERY autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,d74cdcee29b02bcc X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!postnews.google.com!k13g2000hse.googlegroups.com!not-for-mail From: Tony Newsgroups: comp.lang.ada Subject: Re: Discriminant ans tagged type ?! Date: Sat, 22 Mar 2008 02:05:04 -0700 (PDT) Organization: http://groups.google.com Message-ID: References: <47dfde3d$0$26828$426a74cc@news.free.fr> <6d529059-8109-4b17-845e-2a6e1430321c@i7g2000prf.googlegroups.com> <25164625-2bf7-4cea-b4fa-dc1422588446@u72g2000hsf.googlegroups.com> <641eca48-f0c9-4ccd-a998-2de9a727bacb@u10g2000prn.googlegroups.com> NNTP-Posting-Host: 82.240.29.120 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: posting.google.com 1206176704 12528 127.0.0.1 (22 Mar 2008 09:05:04 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Sat, 22 Mar 2008 09:05:04 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: k13g2000hse.googlegroups.com; posting-host=82.240.29.120; posting-account=NPvXCgoAAACeAnV0vTvzXKjbTtI1j27n User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12,gzip(gfe),gzip(gfe) Xref: g2news1.google.com comp.lang.ada:20543 Date: 2008-03-22T02:05:04-07:00 List-Id: On 21 mar, 16:25, Adam Beneschan wrote: > On Mar 21, 1:18 am, Tony wrote: > > > > > On 18 mar, 20:54, Adam Beneschan wrote: > > > > On Mar 18, 8:54 am, Adam Beneschan wrote: > > > > > However, I tried changing the declaration of T as follows: > > > > > T : String (1 .. B.L); -- NO, THIS IS WRONG, I SCREWED UP > > > > > and GNAT accepted it. (I haven't done enough testing to make sure > > > > GNAT handles it correctly in other ways, though.) Here, B refers to > > > > the "current instance" of the type (8.6(17)), and 3.7(18) means that > > > > all instances of the type will have a component L that is inherited > > > > from A, so this should be legal unless there are some other rules that > > > > I've missed (and that GNAT also missed). > > > > Never mind. After reading Bob's post, I got pointed to 3.8(10-12), > > > which disallows references to inherited discriminants in a type > > > extension. So I guess GNAT (or at least the version I'm using, which > > > is probably not the latest) is wrong to accept this. Sorry. > > > > -- Adam > > > -- > > I tried Bob's answer with the Aonix compiler: > > ERROR : LRM:3.8(12), A discriminant used in a constraint may only > > appear alone as a direct_name. > > I'm lost...;-) > > 3.8(12) is one of the rules I overlooked (thanks, Tuck). Perhaps you > tried Bob's answer together with my incorrect suggestion to use > string(1..B.L), which violates that rule; when you use a discriminant > in a constraint, the discriminant can't be an "expanded name" or part > of a larger expression, and I think B.L is an expanded name here. My > apologies for misleading you. > > This should work: > > type B (L : Natural) is new A(L) with record > T : String (1 .. L); > end record; > > Everything I said earlier about visibility wouldn't apply here, > because redeclaring the discriminant L makes it visible inside the > record declaration of B. This would work too: > > type B (Ell : Natural) is new A(L) with record > T : String (1 .. Ell); > end record; > > It's the new discriminant that can be used in the declaration, not the > one inherited from A. > > > Is my first code correct? I guess yes... > > Still no. The compiler may accept it, but that just means the > compiler has a bug. > > I hope I've got everything straight now. > > -- Adam -- You are right !! , it works :-) Thanks for all. Tony. --