J3/06-292 Date: 24 August 2006 To: J3 From: Richard Maine Subject: Misleading text in Note 15.17 Note 15.17 in F2003 is misleading, as described below. I propose that this be fixed in F2008. The note says that polymorphic, allocatable, or pointer arrays are never interoperable. This much is accurate. But then it says that this is because such arrays are not explicit shape or assumed size. While that is true for allocatable and pointer, I can't find any justification for it for polymorphic arrays. A polymorphic variable must be an allocatable, a pointer or a dummy. I see no restriction against a polymorphic dummy being explicit shape. (I'm not sure whether one can be assumed-size or not, but I didn't look very hard at that because one counter-example seemed sufficient). I don't think that a polymorphic array can be interoperable, but the reason has nothing to do with explicit shape or assumed size. I think the reason is the same one that applies to scalar polymorphic variables - an extensible type cannot be interoperable (see the definition of an extensible type, which excludes BIND(C) types). I propose the following edits: In Note 15.17 in subclause 15.2.5 on pg 399 of F2003, replace the Note with "An allocatable or pointer array is never interoperable. Such an array does not meet the requirement of being explicit shape or assumed size." Add a new Note at the end of subclause 15.2.4, at [399:5+] "A polymorphic variable is never interoperable because extensible types are not interoperable types." I made the polymorphic part a separate note in the subclause on scalar variables because it has nothing in particular to do with arrayness. P.S. As a separate but related matter, I'm slightly concerned that the standard might allow a dummy class(*) argument to be considered interoperable if its dynamic type is an interoperable intrinsic one. That is the one way I can think of that the dynamic type of a polymorphic variable can be an interoperable type. I tend to think of interoperability as being a static matter, but our usual convention is that "type" means "dynamic type" if not specified otherwise. Perhaps we should specify otherwise in the definitions of interoperability of variables. I am not sure whether this is a real problem, but J3 might want to consider the question.