Eine generische Prozedur an eine Funktion als aktuelles Argument übergeben

Ich versuche, eine generische Prozedur als tatsächliches Argument an eine Funktion zu übergeben:

module mymod
implicit none

interface func
  module procedure :: func1
  module procedure :: func2
endinterface func

contains

real function func1(x)
  real,intent(in) :: x
  func1 = 2*x
endfunction func1

real function func2(x,y)
  real,intent(in) :: x
  real,intent(in) :: y
  func2 = 2*x + 3*y
endfunction func2

real function func3(func,x,y)
  interface
    real function func(x,y)
      real,intent(in) :: x
      real,intent(in) :: y
    endfunction func
  endinterface
  real,intent(in) :: x
  real,intent(in) :: y
  func3 = func(x,y)
endfunction func3

endmodule mymod

program myprogram
use mymod
implicit none
write(*,*)func3(func,2.,3.)
endprogram myprogram

gfortran 6.2.0 merkt an, dass ich das nicht kann:

test.f90:43:16:

 write(*,*)func3(func,2.,3.)
                1
Error: GENERIC procedure ‘func’ is not allowed as an actual argument at (1)

Ebenso mit ifort 17:

test.f90(39): error #8164: A generic interface name shall not be used as an actual argument.   [FUNC]
write(*,*)func3(func,2.,3.)
----------------^
test.f90(39): error #6637: When a dummy argument is a function, the corresponding actual argument must also be a function.   [FUNC]
write(*,*)func3(func,2.,3.)
----------------^
compilation aborted for test.f90 (code 1)

Ich lese den 2008 Standard-Abschnitt über generische Schnittstellen durch und finde keine solche Einschränkung. Ich kann mir auch keinen Grund vorstellen, warum der Compiler die generische Schnittstelle zur Kompilierungszeit nicht auflösen könnte. Mein Bauch sagt mir, dass dies machbar sein sollte, aber ich habe möglicherweise nicht den richtigen Ansatz. Kennen Sie eine standardkonforme Vorgehensweise?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage