Фортран позволяет параметризовать размер элементов производных типов. Однако там, где элементы фиксированного размера могут иметь значение по умолчанию, назначенное в объявлении типа, похоже, нет способа для параметризованных записей:
PROGRAM main
IMPLICIT NONE
TYPE data1
INTEGER :: array(5) = 2 ! allowed
END type data1
TYPE data2(n)
INTEGER, LEN :: n
INTEGER :: array(n) = 2 ! incorrect: error #8737 with intel fortran 19,
END type data2 ! ignored by gfortran 8.2.1
END PROGRAM main
Назначение значений по умолчанию удобно, поскольку это позволяет избежать повторение инициализации каждый раз при использовании типа, но для полей размером с параметри c это запрещено; Gfortran просто молча игнорирует значение по умолчанию, а Intel Fortran выдает ошибку
error #8737: For a default initialized component every type parameter and array bound
must be a constant expression. [ARRAY]
Есть ли какой-нибудь синтаксис, который все-таки позволил бы определить значение по умолчанию?