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.8 required=5.0 tests=BAYES_00,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!u10g2000prn.googlegroups.com!not-for-mail From: Adam Beneschan Newsgroups: comp.lang.ada Subject: Re: Discriminant ans tagged type ?! Date: Fri, 21 Mar 2008 08:25:38 -0700 (PDT) Organization: http://groups.google.com Message-ID: <641eca48-f0c9-4ccd-a998-2de9a727bacb@u10g2000prn.googlegroups.com> References: <47dfde3d$0$26828$426a74cc@news.free.fr> <6d529059-8109-4b17-845e-2a6e1430321c@i7g2000prf.googlegroups.com> <25164625-2bf7-4cea-b4fa-dc1422588446@u72g2000hsf.googlegroups.com> NNTP-Posting-Host: 66.126.103.122 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: posting.google.com 1206113145 29815 127.0.0.1 (21 Mar 2008 15:25:45 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Fri, 21 Mar 2008 15:25:45 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: u10g2000prn.googlegroups.com; posting-host=66.126.103.122; posting-account=duW0ogkAAABjRdnxgLGXDfna0Gc6XqmQ User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.12) Gecko/20050922 Fedora/1.7.12-1.3.1,gzip(gfe),gzip(gfe) Xref: g2news1.google.com comp.lang.ada:20531 Date: 2008-03-21T08:25:38-07:00 List-Id: 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