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!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Generic private type declaration Date: Fri, 25 Nov 2016 20:17:24 +0100 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: s3c6wwRqkurrfTZpuYYZ+w.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:45.0) Gecko/20100101 Thunderbird/45.5.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:32464 Date: 2016-11-25T20:17:24+01:00 List-Id: On 2016-11-25 18:36, Alejandro R. Mosteo wrote: > I need some eyes on this error because I'm missing something basic. When > compiling this code: > > procedure B001_Tagged is > > generic > type X is private; > package Untagged is > > type Y is new X; > > end Untagged; > > package Ok is new Untagged (Integer); > > type Void is tagged null record; > > package Err is new Untagged (Void); -- Error here > > begin > null; > end B001_Tagged; > > I get in both gnat 4.9.3 and gpl2016 the following error: > > b001_tagged.adb:15:04: instantiation error at line 7 > b001_tagged.adb:15:04: type derived from tagged type must have extension > gnatmake: "b001_tagged.adb" compilation error > > I would expect that the view inside the generic package is untagged and > so the type renaming in line 7 should be correct? Or I'm floundering > with the generic parameter declaration? Yes, generics leak privacy and don't respect any contracts much. Sometimes an actual tagged type matches formal private type and sometimes it does not. Visibility rules are broken with respect to tagged types even without generics (see earlier discussions about private overriding). Ada lawyers will surely tell you that it is OK because it cannot be fixed. In some sense generics are indeed beyond any hope being weakly typed, but still most outrageous examples could be fixed nevertheless. And visibility rules can be fixed for sure. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de