An enumeration literal that
is an identifier
rather than a character_literal
is not considered a literal
in the above sense, because it involves
no special notation “suited to its kind.” It might more properly
be called an enumeration_identifier
for historical reasons.
Name Resolution Rules
This paragraph was
The expected type for a literal
null shall be a single access type.
new wording ("expected type ... shall be a single ... type")
replaces the old "shall be determinable" stuff. It reflects
an attempt to simplify and unify the description of the rules for resolving
aggregates, literals, type conversions, etc. See 8.6,
“The Context of Overload Resolution”
for the details.
For a name
that consists of a character_literal
either its expected type shall be a single character type, in which case
it is interpreted as a parameterless function_call
that yields the corresponding value of the character type, or its expected
profile shall correspond to a parameterless function with a character
result type, in which case it is interpreted as the name of the corresponding
parameterless function declared as part of the character type's definition
). In either case, the character_literal
denotes the enumeration_literal_specification
This paragraph was
A literal null shall
not be of an anonymous access type[, since such types do not have a null
value (see 3.10)].
Reason: This is
a legality rule rather than an overloading rule, to simplify implementations.
An integer literal is of type universal_integer
. A real literal
is of type universal_real
. The literal null
is of type universal_access.
evaluation of a numeric literal, or the literal null
, yields the
The evaluation of a string_literal
that is a primary
yields an array value containing the value of each character of the sequence
of characters of the string_literal
as defined in 2.6
. The bounds of this array
value are determined according to the rules for positional_array_aggregate
), except that for a null string
literal, the upper bound is the predecessor of the lower bound.
For the evaluation
of a string_literal
of type T
, a check is made that the value of each character of
belongs to the component subtype of T
. For the evaluation of a
null string literal, a check is made that its lower bound is greater
than the lower bound of the base range of the index type.
exception Constraint_Error is raised if either of these checks fails.
Ramification: The checks on the characters
need not involve more than two checks altogether, since one need only
check the characters of the string with the lowest and highest position
numbers against the range of the component subtype.
Examples of literals:
3.14159_26536 -- a real literal
1_345 -- an integer literal
'A' -- a character literal
"Some Text" -- a string literal
Incompatibilities With Ada 83
are now treated like other literals, in that they are resolved using
context rather than depending on direct visibility, additional qualification
might be necessary when passing a character_literal
to an overloaded subprogram.
Extensions to Ada 83
Wording Changes from Ada 83
Name Resolution rules for enumeration literals
that are not character_literal
are not included anymore, since they are neither syntactically nor semantically
"literals" but are rather names of parameterless functions.
Extensions to Ada 95
Null now has type universal_access,
which is similar to other literals. Null can be used with anonymous
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe