Go to the first, previous, next, last section, table of contents.
-
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_clause ::= use_package_clause | use_type_clause
-
use_package_clause ::= use package_name {, package_name};
-
use_type_clause ::= use type subtype_mark {, subtype_mark};
Legality Rules
-
A package_name of a use_package_clause shall denote a package.
Static Semantics
-
For each use_clause, there is a certain region of text called the scope
of the use_clause. For a use_clause within a context_clause of a
library_unit_declaration or library_unit_renaming_declaration, the scope
is the entire declarative region of the declaration. For a use_clause
within a context_clause of a body, the scope is the entire body and any
subunits (including multiply nested subunits). The scope does not
include context_clauses themselves.
-
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 denoted by a package_name of 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 determined by a subtype_mark of 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.
-
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
-
The elaboration of a use_clause has no effect.
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 section 7.1 Package Specifications and Declarations
Two_Thirds: Rational_Numbers.Rational := 2/3;
Go to the first, previous, next, last section, table of contents.