8.4 Use Clauses
A
use_package_clause
achieves direct visibility of declarations that appear in the visible
part of a package; a
use_type_clause
achieves direct visibility of the primitive operators of a type.
Syntax
use_package_clause ::= use package_name {,
package_name};
Legality Rules
Static Semantics
For a
use_clause
immediately within a declarative region, the scope is the portion of
the declarative region starting just after the
use_clause
and extending to the end of the declarative region. However, the scope
of a
use_clause
in the private part of a library unit does not include the visible part
of any public descendant of that library unit.
For
each package named in a
use_package_clause
whose scope encloses a place, each declaration that occurs immediately
within the declarative region of the package is
potentially use-visible
at this place if the declaration is visible at this place. For each type
T or
T'Class named in a
use_type_clause
whose scope encloses a place, the declaration of each primitive operator
of type
T is potentially use-visible at this place if its declaration
is visible at this place. If a
use_type_clause
whose scope encloses a place includes the reserved word
all, then
the following entities are also potentially use-visible at this place
if the declaration of the entity is visible at this place:
Each primitive subprogram of T including
each enumeration literal (if any);
Each subprogram that is declared immediately within
the declarative region in which an ancestor type of T is declared
and that operates on a class-wide type that covers T.
Certain implicit declarations may become potentially
use-visible in certain contexts as described in
12.6.
A
declaration is
use-visible if it is potentially use-visible, except
in these naming-conflict cases:
A potentially use-visible declaration is not use-visible
if the place considered is within the immediate scope of a homograph
of the declaration.
Potentially use-visible declarations that have
the same
identifier
are not use-visible unless each of them is an overloadable declaration.
Dynamic Semantics
Examples
Example of a use
clause in a context clause:
with Ada.Calendar; use Ada;
Example of a
use type clause:
use type Rational_Numbers.Rational; --
see 7.1
Two_Thirds: Rational_Numbers.Rational := 2/3;
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe