(j3.2006) Is there something wrong with this?

Dan Nagle danlnagle
Thu Oct 29 20:02:21 EDT 2015


Hi,

This is close to Interp F90/0145 (I think the number is right).

> On Oct 29, 2015, at 17:25 , Van Snyder <Van.Snyder at JPL.NASA.GOV> wrote:
> 
> I think the following module ought to be OK:
> 
> module M
> 
>  type, abstract :: T1
>  end type T1
> 
>  type, extends(t1) :: T2
>  end type T2
> 
> contains
> 
>  class(t1) function F1 ( ) result ( R1 )
>    allocatable :: R1
>    allocate ( t2 :: r1 )
>    select type ( r1 )
>    type is ( t2 )
>      r1 = t2()
>    end select
>  end function F1
> 
>  function F2 ( ) result ( R2 )
>    class(t1), allocatable :: R2
>    allocate ( t2 :: r2 )
>    r2 = t2()
>  end function F2
> 
> end module M
> 
> None of the processors I have will compile it.  They complain in F1 that
> the type of R1 is not T2, and that R1 is not polymorphic in the SELECT
> TYPE statement.  One of them complains about the assignment "r2 = t2()"
> in F2.
> 
> Is it defective?
> 
> I believe the SELECT TYPE construct ought not to be needed.  Indeed, I
> believe the ALLOCATE is also not needed, but it illustrates a problem
> that all my processors complain about in F1 (but which does not occur in
> F2).
> 
> 12.6.2.2p3 says the type and type parameters of the result of the
> function may be specified by a type specification in the FUNCTION
> statement.  It is silent concerning whether the result is or is not
> polymorphic.  Is R1 polymorphic?  I believe so.
> 
> 
> _______________________________________________
> J3 mailing list
> J3 at mailman.j3-fortran.org
> http://mailman.j3-fortran.org/mailman/listinfo/j3


--

Cheers!
Dan Nagle







More information about the J3 mailing list