1! { dg-do compile } 2! 3! PR fortran/52024 4! 5! Contributed by Fran Martinez Fadrique 6! 7module m_test 8 type t_test 9 integer :: i = 0 10 contains 11 generic :: operator(==) => t_equal_i, i_equal_t ! OK 12 procedure, private :: t_equal_i 13 procedure, private, pass(t) :: i_equal_t 14 end type t_test 15contains 16 function t_equal_i (t, i) result(res) 17 class(t_test), intent(in) :: t 18 integer, intent(in) :: i 19 logical :: res 20 21 print *, 't_equal_i', t%i, i 22 res = ( t%i == i ) 23 end function t_equal_i 24 25 function i_equal_t (i, t) result(res) 26 integer, intent(in) :: i 27 class(t_test), intent(in) :: t 28 logical :: res 29 30 print *, 'i_equal_t', i, t%i 31 res = ( t%i == i ) 32 end function i_equal_t 33end module m_test 34 35module m_test2 36 type t2_test 37 integer :: i = 0 38 contains 39 generic :: gen => t2_equal_i, i_equal_t2 ! { dg-error "'t2_equal_i' and 'i_equal_t2' for GENERIC 'gen' at .1. are ambiguous" } 40 procedure, private :: t2_equal_i 41 procedure, private, pass(t) :: i_equal_t2 42 end type t2_test 43contains 44 function t2_equal_i (t, i) result(res) 45 class(t2_test), intent(in) :: t 46 integer, intent(in) :: i 47 logical :: res 48 49 print *, 't2_equal_i', t%i, i 50 res = ( t%i == i ) 51 end function t2_equal_i 52 53 function i_equal_t2 (i, t) result(res) 54 integer, intent(in) :: i 55 class(t2_test), intent(in) :: t 56 logical :: res 57 58 print *, 'i_equal_t2', i, t%i 59 res = ( t%i == i ) 60 end function i_equal_t2 61end module m_test2 62