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.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 109fba,9ac62ca34a465706 X-Google-Attributes: gid109fba,public X-Google-Thread: 103376,9ac62ca34a465706 X-Google-Attributes: gid103376,public From: ncohen@watson.ibm.com (Norman H. Cohen) Subject: Re: on OO differnces between Ada95 and C++ Date: 1996/02/22 Message-ID: <4ghupa$10f5@watnews1.watson.ibm.com>#1/1 X-Deja-AN: 140651161 distribution: world references: <4gbq7q$g08@qualcomm.com> <4gdidj$10f5@watnews1.watson.ibm.com> <4gg6da$8jk@wdl1.wdl.loral.com> organization: IBM T.J. Watson Research Center reply-to: ncohen@watson.ibm.com newsgroups: comp.lang.ada,comp.lang.c++ Date: 1996-02-22T00:00:00+00:00 List-Id: In article <4gg6da$8jk@wdl1.wdl.loral.com>, mab@dst17.wdl.loral.com (Mark A Biggar) writes: |> Given the above example, is the following code legal, I have been unable to |> determine if it is from the RM95: |> |> with Parent.Child; |> package My_Package is |> |> A: Parent.Child.Auxiliary_Type; -- or must I say A: Parent.Auxiliary_Type |> |> end My_Package; No, it is illegal. The effect of the with clause is as if you were compiling My_Package in the following context: package Parent is ... type Auxiliary_Type is ...; ... package Child is ... end Child; end Parent; package My_Package is ... end My_Package; so you must say Parent.Auxiliary_Type. |> If the above is illegal then it presents a problem if I have a library |> level renaming of Parent.Child, like so: |> |> package My_Child renames Parent.Child; |> |> with My_Child; |> package Foo is |> |> A: My_Child.Auxiliary_Type; -- LEGAL? |> |> end Foo; Not legal, and there is no way to name Auxiliary_Type inside Foo, because Parent is not visible there. (AARM 10.1.2(9.b)) If you want to name an entity exported by Parent (and not reexported), the name Parent must appear in the with clause (possibly as a prefix). This makes you write a slightly longer with clause, but it is a very helpful property for program readers trying to determine the origin of an entity named in Foo. |> If this type of naming is legal then there is a simple emulation of |> Norman's multi-part package proposal using child packages and a library |> level rename. It's not, but in any event my proposal allows a public part of a package to refer to entities declared in an earlier private part of the package, while still allowing the public part to be mentioned anywhere in a with clause. You can't do that with public and private children, because of restrictions on where you can name private children in a with clause. -- Norman H. Cohen ncohen@watson.ibm.com