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 38 39 40 41 42 43 44 45 46 47
|
program polymorphic_argument_02
implicit none
integer :: i_value = 1
real :: r_value = 1
character(len=1) :: c_value = "c"
logical :: l_value = .true.
interface str
procedure str_scalar
end interface str
! Calling generic procedure with any argument
print *, str(i_value)
if (str(i_value) /= 0) error stop
print *, str(r_value)
if (str(r_value) /= 0) error stop
print *, str(c_value)
if (str(c_value) /= 0) error stop
print *, str(l_value)
if (str(l_value) /= 0) error stop
! Calling subroutine with polymorphic parameter, with any argument
print *, str_scalar(i_value)
if (str_scalar(i_value) /= 0) error stop
print *, str_scalar(r_value)
if (str_scalar(r_value) /= 0) error stop
print *, str_scalar(c_value)
if (str_scalar(c_value) /= 0) error stop
print *, str_scalar(l_value)
if (str_scalar(l_value) /= 0) error stop
CONTAINS
function str_scalar(g1)
class(*), intent(in) :: g1
integer :: str_scalar
str_scalar = 0
end function str_scalar
end program polymorphic_argument_02
|