AI22-0117-1
!standard 1.3.1(17/5) 25-08-18 AI22-0117-1/06
!standard 1.3.1(26/5)
!standard 1.3.1(45/5)
!standard 1.3.1(71/5)
!standard 1.3.1(77/5)
!standard 1.3.1(85/5)
!standard 1.3.2(1/5)
!standard 1.3.3(8/5)
!standard 1.3.3(11/5)
!standard 1.3.3(22/5)
!standard 1.3.3(28/5)
!standard 1.3.3(36/5)
!standard 1.3.4(2/5)
!class binding interpretation 24-10-23
!status Revision-202Y 25-08-18
!status WG9 Approved 25-10-08
!status ARG Approved 15-0-0 25-01-09
!status work item 24-09-11
!status received 24-09-11
!submitter Jeffrey Cousins
!priority Low
!difficulty Easy
!qualifier Omission
!subject More Terms and Definitions
Define further terms as needed.
A number of important terms are missing from the Terms and Definitions sections. We should add more, and possibly reorganize some that we already have.
(See Summary.)
Add after 1.3.1(17/5):
completion of declaration
final part of the declaration of an entity, giving its full definition
coextension
object that is allocated for an access discriminant of another object
Add after 1.3.1(26/5):
designated subtype
subtype of the objects that can be designated by an access-to-object type
Add after 1.3.1(45/5):
library level
accessibility level for all library units
Note: Any entity declared immediately within a library package is also declared at the library
level.
Add after 1.3.1(71/5):
root type
type from which all the types of a class are derived
Add after 1.3.1(77/5):
subtype predicate
generalized constraint on the permitted values of a subtype
Add after 1.3.1(85/5):
type extension
type that is either a private extension or a record extension
view conversion
view of an object as if of another (sub)type
Insert before 1.3.2(1/5):
expression function
function where the result is given by an expression rather than a body
Add after 1.3.2(1/5):
overloading
multiple declarations with the same name that do not hide each other, but are distinguished by
other characteristics
Note: For instance, a subprogram can be distinguished by the details of its profile, such as the type of its result or of a parameter.
Modify 1.3.3 (8/5):
core language
{clauses 1 through 13 and annexes A, B and J}[clause
or annex] in which are defined language constructs or capabilities that are
[provided by all conforming implementations]{intended
for use in all application areas}
Add after 1.3.3(11/5):
freezing
forbidding the specification of further substantive characteristics
Add after 1.3.3(22/5):
named aggregate
aggregate where the index or component name is given for each component value
Add after 1.3.3(28/5):
positional aggregate
aggregate where the values are given in position order
Modify 1.3.3 (36/5):
specialized needs annex
{annexes C through H,}[annex] in which are
defined language constructs or capabilities that are [not necessarily provided
by all conforming implementations] {intended for use in particular
application areas}
Add after 1.3.4(2/5):
completion of execution
end (or abandonment) of execution of a construct or entity
We consider the Terms and Definitions section the place to define short, descriptive definitions. The lengthy, formal definitions are placed in the body of the Reference Manual as it would be impossible to meet the rules on writing definitions (see below) for the formal definitions. More on this can be found in the AARM Notes for subclause 1.3.
Terms and Definitions should be defined as required by the JTC1 Directives, Part 2. Some highlights for this purpose:
---
A number of terms were suggested by AI22-0033-1 as candidates for future AIs:
Revisions are needed for these terms as they are no longer consistent with AI12-0065-1:
Other candidates can be found by skimming through the index (all defined terms should appear in the index). Candidates include:
If the "other constructs" category (1.3.3) gets too large, it might make sense to split it into "units" and "other constructs" categories.
@dinsa
@xindent{@s9{Note:The set of types of a class share common properties, such as their primitive operations.}}
@dinss
@b{completion of declaration}@hr@xindent{final part of the declaration of an entity, giving its full definition}
@b{coextension}@hr@xindent{object that is allocated for an access discriminant of another object}
@dinsa
@xindent{@s9{Note: Descendant and ancestor are inverse relationships.}}
@dinst
@b{designated subtype}@hr@xindent{subtype of the objects that can be designated by an access-to-object type}
@dinsa
@b{iterable container type}@hr
@xindent{type that has user-defined behavior for iteration, via the Default_Iterator and Iterator_Element aspects}
@dinst
@b{library level}@hr@xindent{accessibility level for all library units}
@xindent{@s9{Note: Any entity declared immediately within a library package is also declared at the library level.}}
@dinsa
@b{representation aspect}@hr
@xindent{aspect that indicates how an entity is mapped onto the underlying hardware, for example the size or alignment of an object}
@dinst
@b{root type}@hr@xindent{type from which all the types of a class are derived}
@dinsa
@b{subtype predicate}@hr
@xindent{type together with optional constraints, null exclusions, and predicates, which constrain the values of the type to the subset that satisfies the implied conditions}
@dinst
@b{subtype predicate}@hr@xindent{generalized constraint on the permitted values of a subtype}
@dinsa
@xindent{@s9{Note: Types are grouped into categories. Most language-defined categories of types are also classes of types.}}
@dinss
@b{type extension}
@hr@xindent{type that is either a private extension or a record extension}
@b{view conversion}@hr
@xindent{view of an object as if of another (sub)type}
@drepl
@b{function}@hr
@xindent{form of subprogram that returns a result and can be called as part of an expression}
@dby
@b{expression function}@hr@xindent{function where the result is given by an expression rather than a body}
@b{function}@hr
@xindent{form of subprogram that returns a result and can be called as part of an expression}
@b{overloading}@hr@xindent{multiple declarations with the same name that do not hide each other, but are distinguished by other characteristics}
@xindent{@s9{Note: For instance, a subprogram can be distinguished by the details of its profile, such as the type of its result or of a parameter.}}
@drepl
@b{core language}@hr
@xindent{clause or annex in which are defined language constructs or capabilities that are provided by all conforming implementations}
@dby
@b{core language}@hr
@xindent{clauses 1 through @ref{13} and annexes @ref{A}, @ref{B} and @ref{J} in which are defined language constructs or capabilities that are intended for use in all application areas}
!comment “1” here means clause 1 in whatever edition; it is different between the ISO and RM versions but we don’t care here so the @ref{} is omitted.
@dinsa
@xindent{@s9{Note: A declaration can appear explicitly in the program text (an explicit declaration), or can be supposed to occur at a given place in the text as a consequence of the semantics of another construct (an implicit declaration).}}
@dinst
@b{freezing}@hr@xindent{forbidding the specification of further substantive characteristics}
@dinsa
@xindent{@s9{Note: Execution of a master construct is a master, with which objects and tasks are associated for the purposes of waiting and finalization.}}
@dinst
@b{named aggregate}@hr@xindent{aggregate where the index or component name is given for each component value}
@dinsa
@xindent{@s9{Note: Each partition can run in a separate address space, possibly on a separate computer. A program can contain just one partition, or it can be distributed across multiple partitions, which can execute concurrently.}}
@dinst
@b{positional aggregate}@hr@xindent{aggregate where the values are given in position order}
@drepl
@b{specialized needs annex}@hr
@xindent{annex in which are defined language constructs or capabilities that are not necessarily provided by all conforming implementations}
@dby
@b{specialized needs annex}@hr
@xindent{annexes @ref{C} through @ref{H}, in which are defined language constructs or capabilities that are intended for use in particular application areas}
@dinsa
@xindent{@s9{Note: Certain pragmas and aspects define various kinds of assertions.}}
@dinst
@b{completion of execution}@hr@xindent{end (or abandonment) of execution of a construct or entity}
This is purely additional informative material, so no tests are needed.
Editor, August 18, 2025
Jean-Pierre’s Editorial Review noted that more than just subprograms can be overloaded. After much wordsmithing by Randy, Tucker, Jean-Pierre, and Jeff, we settled on the wording used above.