Binary operator functions require their arguments to have intent(in). Gfortran currently doesn't enforce this, ifort does.
$ cat oper-fun.f90 module mymod interface operator (.foo.) module procedure foo_int end interface contains function foo_int (a, b) integer:: foo_int integer :: a, b ! <==== should be intent(in) here foo_int = a + 3 * b end function foo_int end module mymod program main use mymod print *, 1 .foo. 2 end program main $ gfortran oper-fun.f90 && ./a.out 7 $ ifort oper-fun.f90 fortcom: Error: oper-fun.f90, line 6: An explicit INTENT(IN) declaration is expected for this dummy argument of the defined operation. [A] function foo_int (a, b) --------------------^ fortcom: Error: oper-fun.f90, line 6: An explicit INTENT(IN) declaration is expected for this dummy argument of the defined operation. [B] function foo_int (a, b) -----------------------^ fortcom: Error: oper-fun.f90, line 14: Error in opening the Library module file. [MYMOD] use mymod ------^ fortcom: Error: oper-fun.f90, line 15: Dotted string neither a defined operator nor a structure component [FOO] print *, 1 .foo. 2 --------------^ compilation aborted for oper-fun.f90 (code 1) -- Summary: binary operator functions should require intent(in) Product: gcc Version: 4.2.0 Status: UNCONFIRMED Keywords: accepts-invalid, diagnostic Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tkoenig at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27122