Возможно ли в настоящее время переопределить конструктор структуры в Фортране? Я видел предлагаемые примеры, подобные этому (например, в спецификации Fortran 2003):
module mymod
type mytype
integer :: x
! Other stuff
end type
interface mytype
module procedure init_mytype
end interface
contains
type(mytype) function init_mytype(i)
integer, intent(in) :: i
if(i > 0) then
init_mytype%x = 1
else
init_mytype%x = 2
end if
end function
end
program test
use mymod
type(mytype) :: x
x = mytype(0)
end program
Это в основном генерирует кучу ошибок из-за избыточных имен переменных (например, Error: атрибут DERIVED 'mytype' конфликтует с атрибутом PROCEDURE в (1) ). Дословная копия примера fortran 2003 генерирует аналогичные ошибки. Я пробовал это в gfortran 4.4, ifort 10.1 и 11.1, и все они вызывают одни и те же ошибки.
Мой вопрос: это просто нереализованная функция fortran 2003? Или я реализую это неправильно?
Edit: Я обнаружил отчет об ошибке и анонсированный патч для gfortran по этой проблеме. Однако я пробовал использовать ноябрьскую сборку gcc46, но безуспешно и с похожими ошибками.
Редактировать 2: Похоже, что приведенный выше код работает с Intel Fortran 12.1.0.