对于代码
module pow_mod
implicit none
integer, parameter :: dp = kind(1.0d0)
interface operator(**)
module procedure mypow
end interface
contains
!
function mypow(x,y) result(x_to_y)
real(kind=dp), intent(in) :: x,y
real(kind=dp) :: x_to_y
x_to_y = exp(y*log(x))
end function mypow
end module pow_mod
gfortran表示
pow_fast.f90:5:25:
5 | module procedure mypow
| 1
Error: Operator interface at (1) conflicts with intrinsic interface
"英特尔Fortran"也有类似的说法。在Fortran中,是否可以在内部类型上重载内部运算符?
不允许有这样的定义操作。来自Fortran 2018(15.4.3.4.2(:
如果运算符是内部运算符(R608(,则伪参数的数量应与该运算符的内部用途一致,并且伪参数的类型、种类类型参数或等级应与内部运算所需的不同(10.1.5(
这是Fortran 2018 中的此限制所禁止的
15.4.3.4.2
定义的操作1如果在通用规范中指定了OPERATOR,则在接口应为可按定义引用的功能运算(10.1.6,15.5(。在两个自变量的函数的情况下,隐含中缀二进制运算符表示法。在一个参数,前缀运算符表示法是隐含的。操作员不得为没有参数的函数或具有的函数指定不止两个论点。伪参数应为非可选参数伪数据对象,并且应具有INTENT(IN(或VALUE属性。函数结果不应具有假定的字符长度如果运算符是一个内在运算符(R608(,虚数论点应与运算符,以及虚设的类型、种类类型参数或等级自变量应与内在运算所需的自变量不同(10.1.5(.