Go to the first, previous, next, last section, table of contents.
-
Deferred constant declarations may be used to declare constants in the
visible part of a package, but with the value of the constant given in
the private part. They may also be used to declare constants imported
from other languages, See section B Interface to Other Languages (normative).
Legality Rules
-
A deferred constant declaration is an object_declaration with the
reserved word constant but no initialization expression. The constant
declared by a deferred constant declaration is called a deferred
constant. A deferred constant declaration requires a completion, which
shall be a full constant declaration (called the full declaration of the
deferred constant), or a pragma Import. See section B Interface to Other Languages (normative).
-
A deferred constant declaration that is completed by a full constant
declaration shall occur immediately within the visible part of a
package_ specification. For this case, the following additional rules
apply to the corresponding full declaration:
-
The full declaration shall occur immediately within the private part of
the same package;
-
The deferred and full constants shall have the same type;
-
If the subtype defined by the subtype_indication in the deferred
declaration is constrained, then the subtype defined by the
subtype_indication in the full declaration shall match it statically. On
the other hand, if the subtype of the deferred constant is
unconstrained, then the full declaration is still allowed to impose a
constraint. The constant itself will be constrained, like all constants;
-
If the deferred constant declaration includes the reserved word aliased,
then the full declaration shall also.
-
A deferred constant declaration that is completed by a pragma Import
need not appear in the visible part of a package_specification, and has
no full constant declaration.
-
The completion of a deferred constant declaration shall occur before the
constant is frozen, See section 7.4 Deferred Constants.
Dynamic Semantics
-
The elaboration of a deferred constant declaration elaborates the
subtype_indication or (only allowed in the case of an imported constant)
the array_type_definition.
NOTES
-
(12) The full constant declaration for a deferred constant that is of a
given private type or private extension is not allowed before the
corresponding full_type_declaration. This is a consequence of the
freezing rules for types, See section 13.14 Freezing Rules.
Examples
-
Examples of deferred constant declarations:
-
Null_Key : constant Key; -- See section 7.3.1 Private Operations
-
CPU_Identifier : constant String(1..8);
pragma Import(Assembler, CPU_Identifier, Link_Name => "CPU_ID");
-- See section B.1 Interfacing Pragmas
Go to the first, previous, next, last section, table of contents.