CVS difference for ais/ai-00251.txt
--- ais/ai-00251.txt 2004/11/14 06:36:57 1.27
+++ ais/ai-00251.txt 2005/01/07 03:07:32 1.28
@@ -1,4 +1,4 @@
-!standard 03.04 (02) 04-11-02 AI95-00251/16
+!standard 03.04 (02) 04-12-29 AI95-00251/18
!standard 02.09 (02)
!standard 03.02.01 (02)
!standard 03.04 (03)
@@ -406,6 +406,9 @@
Delete the paragraphs 21-24 (they're included above).
+ [Editor's note: A somewhat different order of changes is used in the
+ Amendment document, as we can't change formatting with our tools. The
+ net effect is the same, however.]
7.3 Private Types and Private Extensions
@@ -534,8 +537,8 @@
Add after paragraph 15:
- The actual type shall be a descendant of every ancestor of
- the formal type.
+ The actual type for a generic formal derived type shall be a descendant
+ of every ancestor of the formal type.
12.5.5 Formal Interface Types
@@ -970,7 +973,7 @@
@drepl
@xcode<@fa<derived_type_definition ::= [>@ft<@b<abstract>>@fa<] >@ft<@b<new> @i<parent_>>@fa<subtype_indication [record_extension_part]>>
@dby
-@xcode<@fa<interface_list ::= interface_subtype_mark {>@ft<@b<and>>@fa< interface_subtype_mark}>>
+@xcode<@fa<interface_list ::= >@ft<@i<interface_>>@fa<subtype_mark {>@ft<@b<and>>@fa< >@ft<@i<interface_>>@fa<subtype_mark}>>
@xcode<@fa<derived_type_definition ::=
[>@ft<@b<abstract>>@fa<] >@ft<@b<new> @i<parent_>>@fa<subtype_indication [[>@ft<@b<and>>@fa< interface_list] record_extension_part]>>
@@ -1145,171 +1148,163 @@
In a view conversion for an untagged type, the target type shall be convertible
(back) to the operand type.
-If there is a type that is an ancestor of both the target type and the operand
-type, then:
-
-@xbullet<The target type shall be untagged; or>
-
-@xbullet<The operand type shall be covered by or descended from the target
-type; or>
-
-@xbullet<The operand type shall be a class-wide type that covers the target
-type; or>
-
-@xbullet<The operand and target types shall both be class-wide types and the
-specific type associated with at least one of them shall be an interface type.>
-
-If there is no type that is an ancestor of both the target type
-and the operand type, then:
-
-@xbullet<If the target type is a numeric type, then the operand type shall be a
-numeric type.>
-
!corrigendum 4.6(9)
-@drepl
+@ddel
If the target type is an array type, then the operand type shall be an array
type. Further:
-@dby
-@xbullet<If the target type is an array type, then the operand type shall be an array
-type. Further:>
!corrigendum 4.6(10)
-@drepl
+@ddel
@xbullet<The types shall have the same dimensionality;>
-@dby
-@xinbull<The types shall have the same dimensionality;>
!corrigendum 4.6(11/1)
-@drepl
+@ddel
@xbullet<Corresponding index types shall be convertible;>
-@dby
-@xinbull<Corresponding index types shall be convertible;>
!corrigendum 4.6(12/1)
-@drepl
+@ddel
@xbullet<The component subtypes shall statically match; and>
-@dby
-@xinbull<The component subtypes shall statically match; and>
!corrigendum 4.6(12.1/1)
-@drepl
+@ddel
@xbullet<In a view conversion, the target type and the operand type shall both
or neither have aliased components.>
-@dby
-@xinbull<In a view conversion, the target type and the operand type shall both
-or neither have aliased components.>
!corrigendum 4.6(13)
-@drepl
+@ddel
If the target type is a general access type, then the operand type shall be an
access-to-object type. Further:
-@dby
-@xbullet<If the target type is a general access type, then the operand type
-shall be an access-to-object type. Further:>
!corrigendum 4.6(14)
-@drepl
+@ddel
@xbullet<If the target type is an access-to-variable type, then the operand
type shall be an access-to-variable type;>
-@dby
-@xinbull<If the target type is an access-to-variable type, then the operand
-type shall be an access-to-variable type;>
!corrigendum 4.6(15)
-@drepl
+@ddel
@xbullet<If the target designated type is tagged, then the operand designated
type shall be convertible to the target designated type;>
-@dby
-@xinbull<If the target designated type is tagged, then the operand designated
-type shall be convertible to the target designated type;>
!corrigendum 4.6(16)
-@drepl
+@ddel
@xbullet<If the target designated type is not tagged, then the designated types
shall be the same, and either the designated subtypes shall statically match or
the target designated subtype shall be discriminated and unconstrained; and>
-@dby
-@xinbull<If the target designated type is not tagged, then the designated types
-shall be the same, and either the designated subtypes shall statically match or
-the target designated subtype shall be discriminated and unconstrained; and>
!corrigendum 4.6(17)
-@drepl
+@ddel
@xbullet<The accessibility level of the operand type shall not be statically
deeper than that of the target type. In addition to the places where Legality
Rules normally apply (see 12.3), this rule applies also in the private part of
an instance of a generic unit.>
-@dby
-@xinbull<The accessibility level of the operand type shall not be statically
-deeper than that of the target type. In addition to the places where Legality
-Rules normally apply (see 12.3), this rule applies also in the private part of
-an instance of a generic unit.>
!corrigendum 4.6(18)
-@drepl
+@ddel
If the target type is an access-to-subprogram type, then the operand
type shall be an access-to-subprogram type. Further:
-@dby
-@xbullet<If the target type is an access-to-subprogram type, then the operand
-type shall be an access-to-subprogram type. Further:>
!corrigendum 4.6(19)
-@drepl
+@ddel
@xbullet<The designated profiles shall be subtype-conformant.>
-@dby
-@xinbull<The designated profiles shall be subtype-conformant.>
!corrigendum 4.6(20)
-@drepl
+@ddel
@xbullet<The accessibility level of the operand type shall not be statically
deeper than that of the target type. In addition to the places where Legality
Rules normally apply (see 12.3), this rule applies also in the private part of
an instance of a generic unit. If the operand type is declared within a generic
body, the target type shall be declared within the generic body.>
-@dby
-@xinbull<The accessibility level of the operand type shall not be statically
-deeper than that of the target type. In addition to the places where Legality
-Rules normally apply (see 12.3), this rule applies also in the private part of
-an instance of a generic unit. If the operand type is declared within a generic
-body, the target type shall be declared within the generic body.>
!corrigendum 4.6(21)
-@ddel
+@drepl
If the target type is not included in any of the above four cases, there shall
be a type that is an ancestor of both the target type and the operand type.
Further, if the target type is tagged, then either:
+@dby
+If there is a type that is an ancestor of both the target type and the operand
+type, then:
-!corrigendum 4.6(22)
+@xbullet<The target type shall be untagged; or>
-@ddel
-@xbullet<The operand type shall be covered by or descended from the target
-type; or>
!corrigendum 4.6(23)
-@ddel
+@drepl
@xbullet<The operand type shall be a class-wide type that covers the target
type.>
+@dby
+@xbullet<The operand type shall be a class-wide type that covers the target
+type; or>
+@xbullet<The operand and target types shall both be class-wide types and the
+specific type associated with at least one of them shall be an interface type.>
+
!corrigendum 4.6(24)
-@ddel
+@drepl
In a view conversion for an untagged type, the target type shall be convertible
(back) to the operand type.
+@dby
+If there is no type that is an ancestor of both the target type
+and the operand type, then:
+
+@xbullet<If the target type is a numeric type, then the operand type shall be a
+numeric type.>
+
+@xbullet<If the target type is an array type, then the operand type shall be an array
+type. Further:>
+
+@xinbull<The types shall have the same dimensionality;>
+
+@xinbull<Corresponding index types shall be convertible;>
+
+@xinbull<The component subtypes shall statically match; and>
+
+@xinbull<In a view conversion, the target type and the operand type shall both
+or neither have aliased components.>
+
+@xbullet<If the target type is a general access type, then the operand type
+shall be an access-to-object type. Further:>
+
+@xinbull<If the target type is an access-to-variable type, then the operand
+type shall be an access-to-variable type;>
+
+@xinbull<If the target designated type is tagged, then the operand designated
+type shall be convertible to the target designated type;>
+
+@xinbull<If the target designated type is not tagged, then the designated types
+shall be the same, and either the designated subtypes shall statically match or
+the target designated subtype shall be discriminated and unconstrained; and>
+
+@xinbull<The accessibility level of the operand type shall not be statically
+deeper than that of the target type. In addition to the places where Legality
+Rules normally apply (see 12.3), this rule applies also in the private part of
+an instance of a generic unit.>
+
+@xbullet<If the target type is an access-to-subprogram type, then the operand
+type shall be an access-to-subprogram type. Further:>
+
+@xinbull<The designated profiles shall be subtype-conformant.>
+
+@xinbull<The accessibility level of the operand type shall not be statically
+deeper than that of the target type. In addition to the places where Legality
+Rules normally apply (see 12.3), this rule applies also in the private part of
+an instance of a generic unit. If the operand type is declared within a generic
+body, the target type shall be declared within the generic body.>
!corrigendum 7.3(02)
@@ -1420,7 +1415,8 @@
For a generic formal type with an @fa<unknown_discriminant_part>, the actual
may, but need not, have discriminants, and may be definite or indefinite.
@dinst
-The actual type shall be a descendant of every ancestor of the formal type.
+The actual type for a generic formal derived type shall be a descendant of
+every ancestor of the formal type.
!corrigendum 12.5.5(01)
Questions? Ask the ACAA Technical Agent