В настоящее время возможно переопределить конструктор структуры в Fortran? Я видел подобные примеры (например, в спецификации 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? Или я неправильно реализую это?
Изменить: я столкнулся с сообщением об ошибке и объявленным патчем в gfortran по этой проблеме, Тем не менее, я пробовал использовать ноябрьскую сборку gcc46 без везения и подобных ошибок.
Изменить 2: приведенный выше код работает с использованием Intel Fortran 12.1.0.