3.11.1 Completions of Declarations
Declarations sometimes come in two parts.
declaration that requires a second part is said to require completion
The second part is called the completion
the declaration (and of the entity declared), and is either another declaration,
a body, or a pragma
is a body
or an expression_function_declaration
that completes another declaration, or a renaming-as-body (see 8.5.4
Name Resolution Rules
A construct that can
be a completion is interpreted as the completion of a prior declaration
The declaration and the completion occur immediately
within the same declarative region;
If the declaration is overloadable, then the completion
either has a type-conformant profile, or is a pragma
An implicit declaration shall not have a completion.
For any explicit declaration that is specified to
, there shall be a corresponding explicit completion,
unless the declared entity is imported (see B.1
At most one completion is allowed for a given declaration.
Additional requirements on completions appear where each kind of completion
A type is completely defined
at a place that is after its full type definition (if it has one) and
after all of its subcomponent types are completely defined. A type shall
be completely defined before it is frozen (see 13.14
NOTE 1 Completions are in principle
allowed for any kind of explicit declaration. However, for some kinds
of declaration, the only allowed completion is an implementation-defined
pragma, and implementations are not required to have any such pragmas.
NOTE 2 There are rules that prevent
premature uses of declarations that have a corresponding completion.
The Elaboration_Checks of 3.11
uses at run time for subprograms, protected operations, tasks, and generic
units. The rules of 13.14
” prevent, at compile time, premature uses of other entities
such as private types and deferred constants.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe