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 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.
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
91 Completions are in principle allowed
for any kind of explicit declaration. However, for some kinds of declaration,
the only allowed completion is a pragma
Import, and implementations are not required to support pragma
Import for every kind of entity.
92 There are rules that prevent premature
uses of declarations that have a corresponding completion. The Elaboration_Checks
prevent such uses at run time for
subprograms, protected operations, tasks, and generic units. The rules
” prevent, at compile time, premature uses of other entities
such as private types and deferred constants.