(j3.2006) Should parent component have the accessibility of theparent type?

Malcolm Cohen malcolm
Sun Jan 24 01:52:17 EST 2016

Hi Daniel,

I think this is referring to the accessibility of the parent type where it is defined, not where the extension is defined.  Otherwise, as you say, it does not make much sense.  That is certainly how I interpreted it (NAG compiles your example without complaint).  I just cannot imagine how it could make sense for an ancestor component to be popping into and out of visibility as you go down the type tree ? either it?s visible all the way down, or not visible at all.

Unfortunately the paper trail is not exactly clear ? paper 03-224 adds this specification as an editorial fixup with no indication of any supposed technical effect whatsoever.  Grrr.

It might be a good idea to clarify this in F2015.


From: Daniel C Chen 
Sent: Friday, January 22, 2016 11:26 AM
To: j3 at mailman.j3-fortran.org 
Subject: (j3.2006) Should parent component have the accessibility of theparent type?


Consider the following code:

Module A
Type A_t
Integer i
End type
Public A_t
End module

Module B
Use A
Type, extends(A_t) :: B_t
End type
Public B_t
End module 

Module C
Use B
Type, extends(B_t) :: C_t
End type
Subroutine sub(this)
Type(C_t) :: this
This%B_t%A_t%i = 4 !! NOT allowed
This%B_t%i = 4 !! Allowed
End module

The standard states that the parent component has the accessibility of the parent type as follows: [16-007-p80: 2-6]
"An extended type has a scalar, nonpointer, nonallocatable, parent component with the type and type parameters
of the parent type. The name of this component is the parent type name. It has the accessibility of the parent
type. Components of the parent component are inheritance associated (16.5.4) with the corresponding components
inherited from the parent type. An ancestor component of a type is the parent component of the type or an
ancestor component of the parent component."

In the above example, "This%B_t%A_t%i" is not allowed because the parent component "A_t" of "This%B_t" has the accessibility of type A_t, which is private in Module B so not accessible in module C. On the other hand, "This%B_t%i" seems fine.

Is it the intention of the standard to disallow "This%B_t%A_t%i"?



XL Fortran Development - IBM Toronto Software Lab
Phone: 905-413-3056 
Tie: 969-3056 
Email: cdchen at ca.ibm.com

This e-mail has been scanned for all viruses by Star.

J3 mailing list
J3 at mailman.j3-fortran.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.j3-fortran.org/pipermail/j3/attachments/20160124/88a113e1/attachment-0001.html 

More information about the J3 mailing list