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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,feb9db77c9b5b310 X-Google-Attributes: gid103376,public From: dewar@merv.cs.nyu.edu (Robert Dewar) Subject: Re: Access to Unconstrained Arrays Date: 1997/04/18 Message-ID: #1/1 X-Deja-AN: 235797091 References: <335507B4.7A03@boeing.com> Organization: New York University Newsgroups: comp.lang.ada Date: 1997-04-18T00:00:00+00:00 List-Id: John says <) of Integer; type Lists_Ptrs is access all Lists; procedure Do_Something(To : in out Lists_Ptrs) is... List1 : Lists(1..4) := (1,2,3,4); List2 : Lists := (1,2,3,4); begin Do_Something(To => List1); -- Compilation Error. Why? Do_Something(To => List2); -- No problemo!!! end Main; List1 should be an anonymous constrained subtype of type Lists. I was under the impression that subtypes are simply a subset of their base type. Is this not the case for constrained subtypes of unconstrained types? Thanks in advance for any who may respond..>> The compiler messages are correct. Your pointer type can only point to objects of the appropriate unconstrained type, like List2. But the type of List1 is constrained (pretty clearly from your source!!!) so it is not suitable. This somewhat annoying rule was done to save a little bit of memory in some implementations (in some implementations, List2 will materialize a dope, and List1 will not. Incidentally, it is helpful if you are careful to post the EXACT sources that you used, the source above is obvious junk (since you pass the wrong type in both calls), but I am assumning some obvoius repair (such as add aliased to both declarations, and replace in out with access.