Конструктор типа Fortran, определенный с помощью функции C

Я хочу определить конструктор производного типа через функцию C. В следующем примере мне удалось определить перегруженный оператор сложения через интерфейс C. Хотя синтаксис довольно схож, определение конструктора не выполняется под gfortran 4.9 со следующей ошибкой:

test.f90:7.52: module procedure my_module_fortran_new_my_double 1 Error: 'my_module_fortran_new_my_double' at (1) is not a module procedure 

После некоторого времени, потраченного на поиск в Google или на предыдущую запись при переполнении стека, я не нашел никакого решения. Я был бы очень рад, если бы кто-нибудь мог сказать мне, что вызывает эту ошибку и как ее исправить.

Вот исходный код моего модуля:

 module my_module use iso_c_binding type, bind(c) :: my_double real(c_double) :: x end type my_double interface my_double module procedure my_module_fortran_new_my_double end interface interface operator (+) module procedure my_module_fortran_add end interface operator (+) interface type(my_double) function my_module_fortran_new_my_double (v) bind ( c ) use iso_c_binding import :: my_double real (c_double), intent(in) :: v end function my_module_fortran_new_my_double type(my_double) function my_module_fortran_add (v1,v2) bind ( c ) use iso_c_binding import :: my_double type (my_double), intent(in) :: v1,v2 end function my_module_fortran_add end interface end module my_module 

    Внешняя процедура не является процедурой модуля. Я думаю, это то, что вы хотите:

     module my_module use iso_c_binding type, bind(c) :: my_double real(c_double) :: x end type my_double interface type(my_double) function my_module_fortran_new_my_double (v) bind ( c ) use iso_c_binding import :: my_double real (c_double), intent(in) :: v end function my_module_fortran_new_my_double type(my_double) function my_module_fortran_add (v1,v2) bind ( c ) use iso_c_binding import :: my_double type (my_double), intent(in) :: v1,v2 end function my_module_fortran_add end interface interface my_double procedure my_module_fortran_new_my_double end interface interface operator (+) procedure :: my_module_fortran_add end interface operator (+) end module my_module