Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
27432 Discussions

PURE function with EXTERNAL function as argument

mohanmuthu
New Contributor I
284 Views

I am trying to pass a pure function as an argument to another pure function. Is it permissible?

 

For example,

pure integer function func1(func2, arg2)
    external func2
    integer, intent(in) arg2
    func1 = func2(arg2)
end function func1

pure integer function func1(arg1)
    integer, intent(in) arg1
    func1 = arg1*arg1
end function func1

 I attempted it, but I'm getting an error that the external procedure must be declared pure. If its permissible, how to define the external function as pure.

1 Solution
Arjen_Markus
Honored Contributor I
267 Views

Rather than specifying func2 as an external, you should specify the exact interface:

interface 
    pure integer function func2( arg )
        integer, intent(in) :: arg
    end function func2
end interface

Otherwise the compiler has no way of knowing what the function argument is doing.

View solution in original post

2 Replies
Arjen_Markus
Honored Contributor I
268 Views

Rather than specifying func2 as an external, you should specify the exact interface:

interface 
    pure integer function func2( arg )
        integer, intent(in) :: arg
    end function func2
end interface

Otherwise the compiler has no way of knowing what the function argument is doing.

mohanmuthu
New Contributor I
247 Views

Thank you Arjen_Markus, I could make it work with your solution.

Reply