MODULE mytypes IMPLICIT none TYPE pvar character(len=20) :: name integer :: level end TYPE pvar interface operator (==) module procedure star_eq end interface contains function star_eq(a,b) implicit none class(*), intent(in) ::a,b character(len=:), allocatable :: c1, c2 logical ::star_eq integer(8) :: sza, szb star_eq = same_type_as (a, b) if (.not. star_eq) return sza = storage_size (a)/8 szb = storage_size (b)/8 if (sza .ne. szb) then star_eq = .false. else allocate(character(len = sza) :: c1) allocate(character(len = szb) :: c2) c1 = transfer (a, c1) c2 = transfer (b, c2) star_eq = c1 .eq. c2 end if end function star_eq end MODULE mytypes program test_eq use mytypes implicit none type(pvar) :: x, y class(*), allocatable :: u, v x = pvar('test 1', 100) y = pvar('test 1', 100) write(*, *) x == y u = pvar('test 1', 100) v = pvar('test 2', 100) write(*, *) u == v u = 1.0_4 v = 2.0_4 write(*, *) u == v v = 1.0_4 write(*, *) u == v deallocate (u,v) end program test_eq