CVS difference for ais/ai-00344.txt
--- ais/ai-00344.txt 2004/06/08 02:03:47 1.5
+++ ais/ai-00344.txt 2004/06/08 02:08:10 1.6
@@ -1,4 +1,4 @@
-!standard 3.09.01 (03) 04-06-05 AI95-00344/02
+!standard 3.09.01 (03) 04-06-07 AI95-00344/03
!class amendment 03-08-07
!status work item 04-02-29
!status received 03-04-21
@@ -36,17 +36,21 @@
!wording
-Modify 3.9(4) as follows:
+Replace 3.9(4) with:
+
+ The tag of a specific tagged type identifies the
+ full_type_declaration of the type, and for a type extension, is
+ sufficient to uniquely identify the type among all descendants
+ of the same ancestor. If a declaration for a tagged
+ type occurs within a generic_package_declaration, then the
+ corresponding type declarations in distinct instances of the generic
+ package are associated with distinct tags. For a tagged type that is
+ local to a generic package body and with any ancestors also
+ local to the generic body, the language does not specify
+ whether repeated instantiations of the generic body result in
+ distinct tags.
- ... For a tagged type that is local to a generic package body {all of
- whose ancestors are also local to the same generic body}, the
- language does not specify whether repeated instantiations of the generic
- body result in distinct tags. However, to ensure that all descendants
- of a given type have distinct tgs, if any ancestor is declared outside the
- generic body, the tag identifies the particular instance of the body.
- Similarly, for a type declared at an accessibility level deeper than one
- of its ancestor types (if any), the tag identifies the particular execution
- of the enclosing master that elaborated the tagged type declaration.
+Modify 3.9(4) as follows:
AARM NOTE: In most cases, a tag need only identify a particular tagged
type declaration, and can therefore be a simple link-time-known
@@ -63,7 +67,9 @@
typically be separated, one part as the first word of the object,
the second placed in the first extension part that corresponds to a
type declared more nested than its parent or declared in a shared
- generic body when the parent is declared outside.
+ generic body when the parent is declared outside. Alternatively,
+ by using an extra level of indirection, the type Tag could remain
+ a single-word.
Add after 3.9(7):
@@ -145,7 +151,7 @@
With the proposal to add a number of generic packages to provide
standard container abstractions, there has been growing concern about the rule
-precluding extending a type at a deeper accessibliity level. Because
+precluding extending a type at a deeper accessibility level. Because
user-defined controlled types, user-defined storage pools, and
user-defined streams are all implemented using type extension, this rule
can interfere with natural use of generic data structures in nested
@@ -161,10 +167,10 @@
For allocators, we disallow creating an object in a collection whose
access type outlives the type identified by the object's tag.
Similarly, for function return, we disallow returning a classwide object
-from a function if tag identifies a type declared at a deeper level than
+from a function if the tag identifies a type declared at a deeper level than
the function. For similar reasons, we preclude T'Class'Input returning
an object whose tag identifies a type that is declared at a deeper level
-than T. For symmetry, and to prevent writing something which cannot
+than T. For symmetry, and to prevent writing something that cannot
later be meaningfully read, we preclude T'Class'Output writing out an
item whose tag identifies a type of a deeper level than T.
Questions? Ask the ACAA Technical Agent