On 10/5/12 1:35 PM, Van Snyder wrote:
> On Fri, 2012-10-05 at 13:00 +0200, Stefan Mauerberger wrote:
>> Hi There,
>>
>> its me again. This time I stuck with Fortran's polymorphism. What I try
>> to implement is a function whose return value type is not fixed at
>> compile time. In other words, it should return ether a real or integer
>> which is already explicit.
>>
>> Just a toy example which, unfortunately, does not what I want:
>>
>> function get_value(key) result( value )
>> integer, intent(in) :: key
>> class(*), allocatable :: value
>>
>> select case(key)
>> case(1) ! should return integer
>> allocate( value, source = 1 )
>> return
>> case(2) ! should return real
>> allocate( value, source = 2.0 )
>> return
>> end select
>> end function get_value
>>
>> My issue is, the function's result is of implicit polymorphic type.
>> However, I want the result being explicit of intrinsic type integer or
>> real.
>>
>> Could you think of any solution archiving such functionality?
>
> This works with NAG 5.2(668):
>
> program Mauerberger
>
> integer :: I
> class(*), allocatable :: value
> do i = 1, 2
> ! value = get_value(i)
> select type ( value => get_value(i) )
> type is ( integer )
> print *, 'Value is integer = ', value
> type is ( real )
> print *, 'Value is real = ', value
> end select
> end do
>
> contains
>
> function get_value(key) result( value )
> integer, intent(in) :: key
> class(*), allocatable :: value
>
> select case(key)
> case(1) ! should return integer
> allocate( value, source = 1 )
> return
> case(2) ! should return real
> allocate( value, source = 2.0 )
> return
> end select
> end function get_value
>
> end program Mauerberger
>
> Both NAG 5.2(668) and ifort 12.0 Build 20101116 incorrectly objected to
> the assignment to the local allocatable variable "value".
I think Intel 12.0 requires a command line option to enable the
auto-allocate-on-assignment capability.
Cheers,
Bill
>
>> Cheers and thanks in advance,
>> Stefan
--
Bill Long [log in to unmask]
Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9142
Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101
|