- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The code below does not compile with XE 17 (probably justly so). It compiles if U and V are not declared as allocatable arrays.The help for CLASS in the provided documentation does not seem to cover this case, maybe I am missing something here?
PROGRAM P IMPLICIT NONE TYPE,ABSTRACT :: T END TYPE T TYPE,EXTENDS(T) :: T1 END TYPE T1 TYPE(T1),ALLOCATABLE :: U(:) CALL S(U) CONTAINS SUBROUTINE S(V) IMPLICIT NONE CLASS(T),ALLOCATABLE :: V(:) END SUBROUTINE S END PROGRAM P
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
This isn't permitted. Inside `S`, you could (re-)allocate the `V` dummy argument to be some other extension of `T`, that was incompatible with the declared type of the actual argument `U`. To avoid this there is a requirement that the declared type and polymorphic/non-polymorphic nature of the actual and dummy arguments must match if the dummy has the pointer or allocatable attribute (F2008 12.5.2.5p2).
I found a hint of an incomplete mention of this in the ifort documentation for allocatable arrays under "Array arguments", but it applies to scalar dummy arguments and pointer dummy arguments too.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ah, I understand now. Thanks for the clear explanation!

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page