Fortran generic functions based on the return kind

前端 未结 2 1347
渐次进展
渐次进展 2021-01-16 11:56

I am trying to create a generic function in Fortran based on the value to be returned, that is, depending on if the output of the function is to be assigned to a single prec

2条回答
  •  迷失自我
    2021-01-16 12:26

    You cannot distinguish specific functions in a generic interface by their return value. There is no way how the compiler can see what return value type is to be used. A Fortran expression is always evaluated without the surrounding context. Fortran generic disambiguation is based by TKR (type, kind, rank) resolution only using the procedure arguments, not using the return value.

    When you have

    use_func()
    

    there is no way for the compiler to know which of those two functions should be called. Even when it is used directly in an assignment

     x = use_func()
    

    it is evaluated separately. In general, function calls can appear in various complicated expressions. E.g. use_func(use_func()) + use_func(), which one would be which?

    This is the reason why several intrinsic functions have another argument that specifies the return type. For example, the transfer() function has a second argument that specifies which type should be returned. Otherwise the compiler would not be able to find out.

提交回复
热议问题