Pasar un personaje asignable a una subrutina con argumento ficticio polimórfico ilimitado en Fortran

Estoy tratando de escribir una rutina que sea capaz de convertir una cadena en diferentes tipos de tipos de datos, basada en un polimorfismo ilimitado. La idea es que el usuario llame a esta rutina, pasando la variable donde desea almacenar los datos, y la rutina para definir la conversión en función del tipo de variable / argumento.

Un extracto de esta rutina está aquí:

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" es una cadena de "carácter (len = :), asignable". Cuando trato de usar esta rutina pasando una cadena asignable, sale con éxito, no se producen errores / excepciones:

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

Pero la cadena "valor" siempre está vacía. Incluso dentro de la rutina, después de asignar "valor = este% fValue", el valor está vacío (len (valor) es 0).

Parece que el compilador no puede detectar que el argumento es de tipo carácter (len = :), asignable y, por lo tanto, no puede asignarle el valor.

Por supuesto, tengo algunas alternativas, pero la idea de poder usar una única rutina y sin argumentos opcionales para diferentes tipos de datos es realmente agradable.

Puedo usar un tipo definido por el usuario que creo para manejar cadenas, por ejemplo.

Pero me gustaría saber si este es el comportamiento predeterminado en Fortran 2008. Y también, si hay una manera de lograr esto, usando esta rutina, con un solo argumento ficticio "clase (*)", para convertir diferentes tipos, incluido el referido carácter asignable. ¿Hay alguna forma de forzar la asignación dentro de la rutina, por ejemplo?

Agradeceré tus comentarios. Saludos, Eduardo

Respuestas a la pregunta(1)

Su respuesta a la pregunta