Как переопределить конструктор структуры в 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? Или я реализую это неправильно?

Edit: Я обнаружил отчет об ошибке и анонсированный патч для gfortran по этой проблеме. Однако я пробовал использовать ноябрьскую сборку gcc46, но безуспешно и с похожими ошибками.

Редактировать 2: Похоже, что приведенный выше код работает с Intel Fortran 12.1.0.

14
задан marshall.ward 26 February 2012 в 23:51
поделиться