!standard 3.2(2/2) 22-12-15 AI12-0451-1/03 !standard 3.10.2(37/5) !standard 3.10.2(38) !standard 4.3.1(19/5) !standard 7.3.1(5.3/5) !standard 11.4(8) !standard D.8(31) !standard F.3.2(19) !standard F.3.2(20) !standard F.3.2(41) !standard F.3.2(44) !standard G.2.4(11/2) !standard G.2.4(13) !standard G.2.6(6/2) !standard G.2.6(7/1) !class presentation 22-12-01 !status Amendment 1-2012 22-12-14 !status ARG Approved 13-0-0 23-01-19 !status work item 22-12-01 !status received 22-11-04 !priority Low !difficulty Easy !subject Still more changes to wording !summary !question This gathers other changes to wording inspired by ISO editorial changes. Should we make these to the RM? (Yes.) !recommendation (See Summary.) !wording Modify 3.2(2/2): Types are grouped into categories of types. There exist several language-defined categories of types ({summarized in the NOTE}[see NOTES] below), ... [Editor's note: The ISO editors removed the parenthetical "(see NOTES below)". The form is subtly wrong for a reference to a NOTE (not “NOTES”), but it also seems incorrect to reference a note this way (as it implies that there is important information in the note). We added an explanation of what is being referenced; unsure if that will be enough for the ISO editors, but it seems better than outright deleting (at least in the RM).] Modify 3.10.2(37/5): NOTE 5   The Access attribute for subprograms and parameters of an anonymous access-to-subprogram type can be used together to implement "downward closures" — that is, to pass a more-nested subprogram as a parameter to a less-nested subprogram, as can be appropriate for an iterator abstraction or numerical integration. Downward closures can also be implemented using generic formal subprograms (see 15.6). {Unlike for objects, there is no}[Note that] Unchecked_Access {attribute}[is not allowed] for subprograms. [Editor's note: The ISO Editor's removed "Note that"; another example of them deleting the word Note in almost any context. In this case, it seems valuable to have extra emphasis on this point, so we reworded this; this also has the benefit of removing "not allowed" (which they didn't flag, but is dubious if they would allow).] Modify 3.10.2(38): NOTE 6   [Note that using]{Using} an access-to-class-wide tagged type with a dispatching operation is a potentially more structured alternative to using an access-to-subprogram type. [Editor's note: Another "Note that". This one is mostly noise.] Modify 4.3.1(19/5): ... If the value of a discriminant that governs a selected variant_part[ P] is given by a nonstatic expression, and the evaluation of that expression yields a value that does not belong to the nominal subtype of the expression, then Constraint_Error is raised. [Editor's note: There was a stray space in this sentence; while fixing that I noticed that the P here is defined but never used for anything. It should be deleted.] Modify 7.3.1(5.3/5): Furthermore, it is possible for there to be places where a derived type is known to be derived indirectly from an ancestor type, but is not a descendant of even a partial view of the ancestor type, because the parent of {this}[the] derived type is not visibly a descendant of the ancestor. In this case, the derived type inherits no characteristics from that ancestor, but nevertheless is ... [Editor's note: The ISO editors changed "the" to "a" without explanation; this unexplained edit is wrong. We propose to change "the" to "this" to hopefully avoid further edits from ISO. Arguably, we should have named the derived type D in this wording and used D rather than "the derived type" in several places, but that seems like more change than necessary,] Modify 11.4(8): NOTE   [Note that exceptions]{Exceptions} raised in a declarative_part of a body are not handled by the handlers of the handled_sequence_of_statements of that body. [Editor's note: "Note that" is considered noise here.] Modify D.8(31): {The value of }Time_Span_First{ in seconds} shall be no greater than -3600 [ seconds], and {the value of }Time_Span_Last{ in seconds} shall be no less than 3600[ seconds]. [Editor's note: ISO comment: "Is the dash correct?" in regards to the one in front of 3600. I'm not sure what the editor thinks the issue is. Tucker suggested being a bit more explicit in the wording as shown above. Additionally, I suggest a response something like: This is a negative number. The type Time_Span, which has bounds of Time_Span_First and Time_Span_Last, is used for differences between times, so we want to allow both positive and negative values. The most negative value allowed for the type Time_Span has to be at least -3600 seconds (and often much more negative, that is, smaller). We reorganized the text to make this clearer. We use en-dashes rather than hyphens for the negation operators in non-fixed-width fonts for readability. Hyphens can be very small in variable width fonts, and thus easy to miss; that’s not a problem with fixed-width fonts such as Courier so we don’t do that there. This was a typography decision of the earliest draft Ada documents; when it was omitted from a draft in the early portion of my tenure, there was substantial pushback from the Ada community (for the reasons given above) and it was quickly reinstated. Modify F.3.2(19): Table F{.}[-]1 shows the mapping from a sign control symbol to a corresponding character or string in the edited output. In the columns showing the edited output, a lower-case 'b' represents the space character. If there is no sign control symbol but the value of Item is negative, a layout error occurs and no edited output string is produced. Modify title for table following F.3.2(19): Table F{.}[-]1: Edited Output for Sign Control Symbols Modify the title for the table F-1 to F.1 in F.3.2(20), F.3.2(41), and F.3.2(44). Modify G.2.4(11/2): The prescribed results specified in A.5.1 for certain functions at particular parameter values take precedence over the maximum relative error bounds; effectively, they narrow to a single value the result interval allowed by the maximum relative error bounds. Additional rules with a similar effect are given by {Table G.}[table G-]1 for the inverse trigonometric functions, at particular parameter values for which the mathematical result is possibly not a model number of EF.Float_Type (or is, indeed, even transcendental). In each table entry, the values of the parameters are such that the result lies on the axis between two quadrants; the corresponding accuracy rule, which takes precedence over the maximum relative error bounds, is that the result interval is the model interval of EF.Float_Type associated with the exact mathematical result given in the table. [Editor's note: Change reference to table.] Modify title for table following G.2.4(13): Table G{.}[-]1: Tightly Approximated Elementary Function Results Modify G.2.6(6/2): The error bounds for particular complex functions are tabulated in [table G-]{Table G.}2. In the table, the error bound is given as the coefficient of CT.Real'Model_Epsilon. Modify title for table following G.2.6(7/1): Table G{.}[-]2: Error Bounds for Particular Complex Functions !discussion These generally are improvements. !corrigendum 3.2(2/2) @drepl Types are grouped into @i of types. There exist several @i of types (see NOTES below), reflecting the similarity of their values and primitive operations. Most categories of types form @i of types. @i types are those whose values are logically indivisible; @i types are those whose values are composed of @i values. @dby Types are grouped into @i of types. There exist several @i of types (summarized in the NOTE below), reflecting the similarity of their values and primitive operations. Most categories of types form @i of types. @i types are those whose values are logically indivisible; @i types are those whose values are composed of @i values. !corrigendum 3.10.2(37) !comment AI12-0440-1 also changed this one, but did not give a Corrigendum section !comment Thus, all of the change is given here. @drepl @xindent<@s9> @dby @xindent<@s9> !corrigendum 3.10.2(38) @drepl @xindent<@s9> @dby @xindent<@s9> !corrigendum 4.3.1(19/5) @drepl For the evaluation of a @fa, any per-object constraints (see 3.8) for components specified in the association list are elaborated and any @fas are evaluated and converted to the subtype of the associated component. Any constraint elaborations and @fa evaluations (and conversions) occur in an arbitrary order, except that the @fa for a discriminant is evaluated (and converted) prior to the elaboration of any per-object constraint that depends on it, which in turn occurs prior to the evaluation and conversion of the @fa for the component with the per-object constraint. If the value of a discriminant that governs a selected @fa @i

is given by a nonstatic @fa, and the evaluation of that @fa yields a value that does not belong to the nominal subtype of the @fa, then Constraint_Error is raised. @dby For the evaluation of a @fa, any per-object constraints (see 3.8) for components specified in the association list are elaborated and any @fas are evaluated and converted to the subtype of the associated component. Any constraint elaborations and @fa evaluations (and conversions) occur in an arbitrary order, except that the @fa for a discriminant is evaluated (and converted) prior to the elaboration of any per-object constraint that depends on it, which in turn occurs prior to the evaluation and conversion of the @fa for the component with the per-object constraint. If the value of a discriminant that governs a selected @fa is given by a nonstatic @fa, and the evaluation of that @fa yields a value that does not belong to the nominal subtype of the @fa, then Constraint_Error is raised. !corrigendum 7.3.1(5.3/5) !comment The only Ada 2022 change is to the paragraph number, so there is no conflict. @drepl Furthermore, it is possible for there to be places where a derived type is known to be derived indirectly from an ancestor type, but is not a descendant of even a partial view of the ancestor type, because the parent of the derived type is not visibly a descendant of the ancestor. In this case, the derived type inherits no characteristics from that ancestor, but nevertheless is within the derivation class of the ancestor for the purposes of type conversion, the "covers" relationship, and matching against a formal derived type. In this case the derived type is effectively a @i of an incomplete view of the ancestor. @dby Furthermore, it is possible for there to be places where a derived type is known to be derived indirectly from an ancestor type, but is not a descendant of even a partial view of the ancestor type, because the parent of this derived type is not visibly a descendant of the ancestor. In this case, the derived type inherits no characteristics from that ancestor, but nevertheless is within the derivation class of the ancestor for the purposes of type conversion, the "covers" relationship, and matching against a formal derived type. In this case the derived type is effectively a @i of an incomplete view of the ancestor. !corrigendum 11.4(8) @drepl @xindent<@s9 of a body are not handled by the handlers of the @fa of that body.>> @dby @xindent<@s9 of a body are not handled by the handlers of the @fa of that body.>> !corrigendum D.8(31) @drepl Time_Span_First shall be no greater than -3600 seconds, and Time_Span_Last shall be no less than 3600 seconds. @dby The value of Time_Span_First in seconds shall be no greater than @endash3600, and the value of Time_Span_Last in seconds shall be no less than 3600. !comment We did not include !corrigendum sections for the table numbering !comment change. !ASIS No ASIS effect. !ACATS test None of these changes are intended to have any semantic effect, so no tests are needed. !appendix ****************************************************************