File: AA-8-4.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (279 lines) | stat: -rw-r--r-- 20,215 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Use Clauses</TITLE>
    <META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
    <META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
    <STYLE type="text/css">
    DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
    TT {font-family: "Courier New", monospace}
    DT {display: compact}
    DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
    DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Index {font-family: "Times New Roman", Times, serif}
    DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
    DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
    DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left:  10.0em; margin-bottom: 0.6em}
    DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
    DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left:  15.0em; margin-bottom: 0.6em}
    UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
    DD.Hanging {margin-left: 6.0em}
    DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.IndentedHanging {margin-left: 2.0em}
    DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.HangingInBulleted {margin-left: 4.0em}
    DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallHanging {margin-left: 7.5em}
    DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallIndentedHanging {margin-left: 2.0em}
    DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallHangingInBulleted {margin-left: 5.0em}
    DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.Enumerated {margin-left: 2.0em}
    DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallEnumerated {margin-left: 2.5em}
    DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    </STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-8-3.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-8-5.html">Next</A></P>
<HR>
<H1> 8.4 Use Clauses</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[A <FONT FACE="Arial, Helvetica">use_package_clause</FONT>
achieves direct visibility of declarations that appear in the visible
part of a package; a <FONT FACE="Arial, Helvetica">use_type_clause</FONT>
achieves direct visibility of the primitive operators of a type.] </DIV>

<H4 ALIGN=CENTER>Language Design Principles</H4>
<DIV Class="Paranum"><FONT SIZE=-2>1.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I3375"></A>If and only
if the visibility rules allow P.A, &quot;<B>use</B> P;&quot; should make
A directly visible (barring name conflicts). This means, for example,
that child library units, and generic formals of a formal package whose
<FONT FACE="Arial, Helvetica">formal_package_actual_part</FONT> is (&lt;&gt;),
should be made visible by a <FONT FACE="Arial, Helvetica">use_clause</FONT>
for the appropriate package.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>1.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I3376"></A>The rules
for <FONT FACE="Arial, Helvetica">use_clause</FONT>s were carefully constructed
to avoid so-called <I>Beaujolais</I> effects, where the addition or removal
of a single <FONT FACE="Arial, Helvetica">use_clause</FONT>, or a single
declaration in a &quot;use&quot;d package, would change the meaning of
a program from one legal interpretation to another. </FONT></DIV>

<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">use_clause<A NAME="I3377"></A>
::= </FONT><A NAME="I3378"></A><FONT FACE="Arial, Helvetica">use_package_clause</FONT>&nbsp;|&nbsp;<A NAME="I3379"></A><FONT FACE="Arial, Helvetica">use_type_clause</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">use_package_clause<A NAME="I3380"></A>
::= </FONT><B>use</B>&nbsp;<I>package_</I><A NAME="I3381"></A><FONT FACE="Arial, Helvetica">name</FONT>&nbsp;{,&nbsp;<I>package_</I><A NAME="I3382"></A><FONT FACE="Arial, Helvetica">name</FONT>};</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">use_type_clause<A NAME="I3383"></A>
::= </FONT><B>use&nbsp;type</B>&nbsp;<A NAME="I3384"></A><FONT FACE="Arial, Helvetica">subtype_mark</FONT>&nbsp;{,&nbsp;<A NAME="I3385"></A><FONT FACE="Arial, Helvetica">subtype_mark</FONT>};</DIV>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;A <I>package_</I><FONT FACE="Arial, Helvetica">name</FONT>
of a <FONT FACE="Arial, Helvetica">use_package_clause</FONT> shall denote
a package. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>5.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>This includes
formal packages. </FONT></DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3386"></A>For each <FONT FACE="Arial, Helvetica">use_clause</FONT>,
there is a certain region of text called the <I>scope</I> of the <FONT FACE="Arial, Helvetica">use_clause</FONT>.
For a <FONT FACE="Arial, Helvetica">use_clause</FONT> within a <FONT FACE="Arial, Helvetica">context_clause</FONT>
of a <FONT FACE="Arial, Helvetica">library_unit_declaration</FONT> or
<FONT FACE="Arial, Helvetica">library_unit_renaming_declaration</FONT>,
the scope is the entire declarative region of the declaration. For a
<FONT FACE="Arial, Helvetica">use_clause</FONT> within a <FONT FACE="Arial, Helvetica">context_clause</FONT>
of a body, the scope is the entire body [and any subunits (including
multiply nested subunits). The scope does not include <FONT FACE="Arial, Helvetica">context_clause</FONT>s
themselves.]</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;For a <FONT FACE="Arial, Helvetica">use_clause</FONT>
immediately within a declarative region, the scope is the portion of
the declarative region starting just after the <FONT FACE="Arial, Helvetica">use_clause</FONT>
and extending to the end of the declarative region. However, the scope
of a <FONT FACE="Arial, Helvetica">use_clause</FONT> in the private part
of a library unit does not include the visible part of any public descendant
of that library unit. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.a</FONT></DIV>
<DIV Class="Annotations" Style="margin-bottom: 0.4em"><FONT SIZE=-1><B>Reason:
</B>The exception echoes the similar exception for ``immediate scope
(of a declaration)'' (see <A HREF="AA-8-2.html">8.2</A>). It makes <FONT FACE="Arial, Helvetica">use_clause</FONT>s
work like this: </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.b</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>package</B>&nbsp;P&nbsp;<B>is</B><BR>
&nbsp;&nbsp;&nbsp;&nbsp;<B>type</B>&nbsp;T&nbsp;<B>is</B>&nbsp;<B>range</B>&nbsp;1..10;<BR>
<B>end</B>&nbsp;P;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.c</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>with</B>&nbsp;P;<BR>
<B>package</B>&nbsp;Parent&nbsp;<B>is</B><BR>
<B>private</B><BR>
&nbsp;&nbsp;&nbsp;&nbsp;<B>use</B>&nbsp;P;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;X&nbsp;:&nbsp;T;<BR>
<B>end</B>&nbsp;Parent;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.d</FONT></DIV>
<DIV Class="SmallExamples"><TT><B>package</B>&nbsp;Parent.Child&nbsp;<B>is</B><BR>
&nbsp;&nbsp;&nbsp;&nbsp;Y&nbsp;:&nbsp;T;&nbsp;--<I>&nbsp;Illegal!</I><BR>
&nbsp;&nbsp;&nbsp;&nbsp;Z&nbsp;:&nbsp;P.T;<BR>
<B>private</B><BR>
&nbsp;&nbsp;&nbsp;&nbsp;W&nbsp;:&nbsp;T;<BR>
<B>end</B>&nbsp;Parent.Child;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>7.e</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The declaration of Y is illegal
because the scope of the ``<B>use</B> P'' does not include that place,
so T is not directly visible there. The declarations of X, Z, and W are
legal. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;<A NAME="I3387"></A>For each package denoted by
a <I>package_</I><FONT FACE="Arial, Helvetica">name</FONT> of a <FONT FACE="Arial, Helvetica">use_package_clause</FONT>
whose scope encloses a place, each declaration that occurs immediately
within the declarative region of the package is <I>potentially</I> <I>use-visible</I>
at this place if the declaration is visible at this place. For each type
<I>T</I> or <I>T</I>'Class determined by a <FONT FACE="Arial, Helvetica">subtype_mark</FONT>
of a <FONT FACE="Arial, Helvetica">use_type_clause</FONT> whose scope
encloses a place, the declaration of each primitive operator of type
<I>T</I> is potentially use-visible at this place if its declaration
is visible at this place. </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>Primitive
subprograms whose defining name is an <FONT FACE="Arial, Helvetica">identifier</FONT>
are <I>not</I> made potentially visible by a <FONT FACE="Arial, Helvetica">use_type_clause</FONT>.
A <FONT FACE="Arial, Helvetica">use_type_clause</FONT> is only for operators.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The semantics described here should
be similar to the semantics for expanded names given in <A HREF="AA-4-1-3.html">4.1.3</A>,
``<A HREF="AA-4-1-3.html">Selected Components</A>'' so as to achieve
the effect requested by the ``principle of equivalence of <FONT FACE="Arial, Helvetica">use_clause</FONT>s
and <FONT FACE="Arial, Helvetica">selected_component</FONT>s.'' Thus,
child library units and generic formal parameters of a formal package
are potentially use-visible when their enclosing package is use'd.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The &quot;visible at that place&quot;
part implies that applying a <FONT FACE="Arial, Helvetica">use_clause</FONT>
to a parent unit does not make all of its children use-visible -- only
those that have been made visible by a <FONT FACE="Arial, Helvetica">with_clause</FONT>.
It also implies that we don't have to worry about hiding in the definition
of &quot;directly visible&quot; -- a declaration cannot be use-visible
unless it is visible.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.d</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>Note that &quot;<B>use type</B>
T'Class;&quot; is equivalent to &quot;<B>use type</B> T;&quot;, which
helps avoid breaking the generic contract model. </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;<A NAME="I3388"></A><A NAME="I3389"></A>A
declaration is <I>use-visible</I> if it is potentially use-visible, except
in these naming-conflict cases: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>A potentially use-visible declaration is not use-visible
if the place considered is within the immediate scope of a homograph
of the declaration.</LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<UL Class="Bulleted"><LI TYPE=DISC>Potentially use-visible declarations that have the same
<FONT FACE="Arial, Helvetica">identifier</FONT> are not use-visible unless
each of them is an overloadable declaration. </LI></UL>
<DIV Class="Paranum"><FONT SIZE=-2>11.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>Overloadable
declarations don't cancel each other out, even if they are homographs,
though if they are not distinguishable by formal parameter names or the
presence or absence of <FONT FACE="Arial, Helvetica">default_expression</FONT>s,
any use will be ambiguous. We only mention <FONT FACE="Arial, Helvetica">identifier</FONT>s
here, because declarations named by <FONT FACE="Arial, Helvetica">operator_symbol</FONT>s
are always overloadable, and hence never cancel each other. Direct visibility
is irrelevant for <FONT FACE="Arial, Helvetica">character_literal</FONT>s.
</FONT></DIV>

<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;<A NAME="I3390"></A>The elaboration of a <FONT FACE="Arial, Helvetica">use_clause</FONT>
has no effect. </DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Example of a
use clause in a context clause:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Examples"><TT><B>with</B>&nbsp;Ada.Calendar;&nbsp;<B>use</B>&nbsp;Ada;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Example of a use
type clause:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Examples"><TT><B>use&nbsp;type</B>&nbsp;Rational_Numbers.Rational;&nbsp;--<I>&nbsp;see&nbsp;<A HREF="AA-7-1.html">7.1</A></I><BR>
Two_Thirds:&nbsp;Rational_Numbers.Rational&nbsp;:=&nbsp;2/3;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>In ``<B>use</B>
X, Y;'', Y cannot refer to something made visible by the ``<B>use</B>''
of X. Thus, it's not (quite) equivalent to ``<B>use</B> X; <B>use</B>
Y;''.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>If a given declaration is already
immediately visible, then a <FONT FACE="Arial, Helvetica">use_clause</FONT>
that makes it potentially use-visible has no effect. Therefore, a <FONT FACE="Arial, Helvetica">use_type_clause</FONT>
for a type whose declaration appears in a place other than the visible
part of a package has no effect; it cannot make a declaration use-visible
unless that declaration is already immediately visible.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16.c</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>&quot;<B>Use</B> <B>type</B> S1;&quot;
and &quot;<B>use</B> <B>type</B> S2;&quot; are equivalent if S1 and S2
are both subtypes of the same type. In particular, &quot;<B>use</B> <B>type</B>
S;&quot; and &quot;<B>use</B> <B>type</B> S'Base;&quot; are equivalent.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16.d</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>We considered adding
a rule that prevented several declarations of views of the same entity
that all have the same semantics from cancelling each other out. For
example, if a (possibly implicit) <FONT FACE="Arial, Helvetica">subprogram_declaration</FONT>
for &quot;+&quot; is potentially use-visible, and a fully conformant
renaming of it is also potentially use-visible, then they (annoyingly)
cancel each other out; neither one is use-visible. The considered rule
would have made just one of them use-visible. We gave up on this idea
due to the complexity of the rule. It would have had to account for both
overloadable and non-overloadable <FONT FACE="Arial, Helvetica">renaming_declaration</FONT>s,
the case where the rule should apply only to some subset of the declarations
with the same defining name, and the case of <FONT FACE="Arial, Helvetica">subtype_declaration</FONT>s
(since they are claimed to be sufficient for renaming of subtypes). </FONT></DIV>

<H4 ALIGN=CENTER>Extensions to Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>16.e</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><A NAME="I3391"></A>The <FONT FACE="Arial, Helvetica">use_type_clause</FONT>
is new to Ada 95. </FONT></DIV>

<H4 ALIGN=CENTER>Wording Changes from Ada 83</H4>
<DIV Class="Paranum"><FONT SIZE=-2>16.f</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1>The phrase ``omitting from this
set any packages that enclose this place'' is no longer necessary to
avoid making something visible outside its scope, because we explicitly
state that the declaration has to be visible in order to be potentially
use-visible. </FONT></DIV>

<HR>
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-8-3.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-8-5.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>