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
  
     | 
    
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>Ada95 - 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="RM-TOC.html">Contents</A>   <A HREF="RM-0-29.html">Index</A>   <A HREF="RM-8-3.html">Previous</A>   <A HREF="RM-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">   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>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">use_clause<A NAME="I3223"></A>
::= </FONT><A NAME="I3224"></A><FONT FACE="Arial, Helvetica">use_package_clause</FONT> | <A NAME="I3225"></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="I3226"></A>
::= </FONT><B>use</B> <I>package_</I><A NAME="I3227"></A><FONT FACE="Arial, Helvetica">name</FONT> {, <I>package_</I><A NAME="I3228"></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="I3229"></A>
::= </FONT><B>use type</B> <A NAME="I3230"></A><FONT FACE="Arial, Helvetica">subtype_mark</FONT> {, <A NAME="I3231"></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">   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>
<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal">   <A NAME="I3232"></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">   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>8</FONT></DIV>
<DIV Class="Normal">   <A NAME="I3233"></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>9</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">   <A NAME="I3234"></A><A NAME="I3235"></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>
<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Normal">    <A NAME="I3236"></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">    <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> Ada.Calendar; <B>use</B> Ada;</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Wide" Style="margin-bottom: 0.4em">    <I>Example of a use
type clause:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Examples"><TT><B>use type</B> Rational_Numbers.Rational; --<I> see <A HREF="RM-7-1.html">7.1</A></I><BR>
Two_Thirds: Rational_Numbers.Rational := 2/3;</TT></DIV>
<HR>
<P><A HREF="RM-TOC.html">Contents</A>   <A HREF="RM-0-29.html">Index</A>   <A HREF="RM-8-3.html">Previous</A>   <A HREF="RM-8-5.html">Next</A>   <A HREF="RM-TTL.html">Legal</A></P>
</BODY>
</HTML>
 
     |