Ada Reference Manual (Ada 2022) — Legal Information

# 8.4 Use Clauses

1
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

2
use_clause ::= use_package_clause | use_type_clause
3
use_package_clause ::= use package_name {, package_name};
4/3
use_type_clause ::= use [all] type subtype_mark {, subtype_mark};

#### Legality Rules

5/2
A package_name of a use_package_clause shall denote a nonlimited view of a package.

#### Static Semantics

6
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.
7
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.
7.1/2
A package is named in a use_package_clause if it is denoted by a package_name of that clause. A type is named in a use_type_clause if it is determined by a subtype_mark of that clause.
8/3
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:
8.1/3
Each primitive subprogram of T including each enumeration literal (if any);
8.2/3
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.
8.3/3
Certain implicit declarations may become potentially use-visible in certain contexts as described in 12.6.
9
A declaration is use-visible if it is potentially use-visible, except in these naming-conflict cases:
10
A potentially use-visible declaration is not use-visible if the place considered is within the immediate scope of a homograph of the declaration.
11
Potentially use-visible declarations that have the same identifier are not use-visible unless each of them is an overloadable declaration.

#### Dynamic Semantics

12
The elaboration of a use_clause has no effect.

#### Examples

13
Example of a use clause in a context clause:
14
with Ada.Calendar; use Ada;
15
Example of a use type clause:
16
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