1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
module write_18_mod
type :: MyType
integer :: a, b
end type MyType
interface write(formatted)
procedure :: output
end interface write(formatted)
contains
subroutine output(self, unit, iotype, v_list, iostat, iomsg)
class(MyType), intent(in) :: self
integer, intent(in) :: unit
character(*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
! The iotype must be "DT", not "(dt)" or any other form
if (iotype /= 'DT') error stop
if (self%a /= 10) error stop
if (self%b /= 20) error stop
iostat = 0
end subroutine output
end module write_18_mod
program write_18
use write_18_mod
type(MyType) :: obj
obj%a = 10
obj%b = 20
write(*, '(dt)') obj
print *, "ok"
end program write_18
|