program main use, intrinsic :: iso_fortran_env, only : error_unit implicit none ! http://fortranwiki.org/fortran/show/Real+precision integer, parameter :: sp = selected_real_kind(6, 37) integer, parameter :: dp = selected_real_kind(15, 307) real(sp) :: a32 real(dp) :: a64 real(sp), parameter :: pi32 = 4*atan(1._sp) real(dp), parameter :: pi64 = 4*atan(1._dp) if (pi32 == pi64) stop 1 call timestwo(a32) call timestwo(a64) contains elemental subroutine timestwo(a) class(*), intent(inout) :: a select type (a) type is (real(sp)) a = 2*a type is (real(dp)) a = 2*a type is (integer) a = 2*a end select end subroutine timestwo end program