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: jvl@ocsystems.com (Joel VanLaven) Subject: Re: Access to Unconstrained Arrays Date: 1997/04/18 Message-ID: <1997Apr18.141618.10240@ocsystems.com>#1/1 X-Deja-AN: 235735540 References: <335507B4.7A03@boeing.com> Organization: OC Systems, Inc. Newsgroups: comp.lang.ada Date: 1997-04-18T00:00:00+00:00 List-Id: John Harbaugh (john.s.harbaugh2@boeing.com) wrote: : When trying to pass pointers to objects of unconstrained array type, I : am getting confusing compiler errors. For example: : procedure Main is : type Lists is array(Natural range <>) 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? I think your compiler is stopping at the first error or something. Our compiler says that both calls are incorrect. List1 and List2 are arrays, NOT access values. So, neither call matches the procedure profile. In fact, List2 IS constrained. It is given a constraint when it is initialized. If your program were to assign (1,2) to either list it would raise a constraint error (the same as for list1). Did you try commenting out the first call? I hope that the compiler you are using does not really accept the second call. If it does either it is a bug in your compiler or in ours :). I am betting that neither has a bug with respect to this. To make this compile, you need to either change Do_Something or change the two object declarations to be something like List1 : Lists_Ptrs := new lists'(1,2,3,4); List2 : Lists_Ptrs := new lists'(1,2,3,4); : Thanks in advance for any who may respond. : - John No problem, -- -- Joel VanLaven