Passando um caractere alocável para uma sub-rotina com argumento fictício polimórfico ilimitado no Fortran

Estou tentando escrever uma rotina capaz de converter uma string em diferentes tipos de dados, com base no polimorfismo ilimitado. A idéia é que o usuário chame essa rotina, passando a variável onde deseja armazenar os dados e a rotina para definir a conversão com base no tipo de variável / argumento.

Um trecho desta rotina está aqui:

subroutine GetAsScalar (this, value, status)
    !Arguments-------------------------------------------------------------
    class(TKeyword)                                 ::  this
    class(*)                                        ::  value
    logical, optional                               ::  status

    !Local-----------------------------------------------------------------
    integer                                         ::  stat        

    !----------------------------------------------------------------------  

    stat = 0

    select type (value)
    type is (REAL(real32))      !single precision
        read (this%fValue, *, IOSTAT = stat) value           
    type is (REAL(real64))      !double precision
        read (this%fValue, *, IOSTAT = stat) value
    type is (LOGICAL)
        read (this%fValue, *, IOSTAT = stat) value
    type is (INTEGER(int32))    !integer
        read (this%fValue, *, IOSTAT = stat) value
    type is (INTEGER(int64))    !long integer
        read (this%fValue, *, IOSTAT = stat) value
    type is (CHARACTER(*))
        value = this%fValue
    class default            
        this%Message = "Invalid data type"
        status = .false.
        return
    end select

    if (present (status)) then
        if (stat /= 0) then
            status = .false.
        else                    
            status = .true.
        endif
    endif

end subroutine GetAsScalar

"this% fValue" é um caractere "(len = :), alocável". Quando tento usar essa rotina passando uma string alocável, ela sai com êxito, sem erros / exceções:

character(len=:), allocatable :: value
call keyword%GetAsScalar(value)

Mas a cadeia "valor" está sempre vazia. Mesmo dentro da rotina, após a atribuição "value = this% fValue", o valor está vazio (len (value) é 0).

Parece que o compilador não pode detectar que o argumento é do tipo caractere (len = :), alocável e, portanto, não pode atribuir o valor a ele.

É claro que tenho algumas alternativas, mas a ideia de poder usar uma única montagem e sem argumentos opcionais para diferentes tipos de dados é muito boa.

Eu posso usar um tipo definido pelo usuário que eu criei para manipular seqüências de caracteres, por exemplo.

Mas gostaria de saber se esse é o comportamento padrão no Fortran 2008. E também, se existe uma maneira de fazer isso, usando esta rotina, com um único argumento fictício "class (*)", para converter tipos diferentes, incluindo o referido caráter alocável. Existe uma maneira de forçar a alocação dentro da rotina, por exemplo?

Eu aprecio seus comentários. Cheers, Eduardo

questionAnswers(1)

yourAnswerToTheQuestion