Это ошибка (или отсутствие поддержки) в используемой версии компилятора. В версиях gfortran 7 и 8 я вижу ту же проблему, но, как уже было отмечено, gfortran 9 дает ожидаемый ответ. «Использовать другой компилятор / версию» - это ответ на ваш вопрос.
Что иногда полезно в подобных случаях, так это дополнительный вопрос: «Что я могу сделать, чтобы обойти эту ошибку, не меняя компилятор?»
Пример вопроса довольно прост, что приводит к небольшому количеству вариантов. Внутреннее c присваивание построенного массива или распределение по источникам не помогают.
Есть что-нибудь интересное, что делает? Почему да! Параметризованные производные типы.
Похоже, что gfortran 8 сталкивается с проблемой вопроса, но поддерживает параметризацию производного типа (gfortran 7 не поддерживает эту функцию Fortran 2003). Это может быть хороший обходной путь или даже альтернативный подход к реальной проблеме:
program test
type t1(length, size)
integer, len :: length, size
character(len=length) :: c(size)
end type t1
class(t1(:,:)), allocatable :: t
call test_string1()
call test_string2(t)
contains
subroutine test_string1()
character(len=:), allocatable :: c(:)
allocate( character(10) :: c(1) )
write(*, *) 'Size in string1: ', len(c)
end subroutine test_string1
subroutine test_string2(this)
class(t1(:,:)), allocatable :: this
allocate( t1(10,1) :: this )
write(*, *) 'Size in string2: ', len(this%c)
end subroutine test_string2
end program test