The INTRINSIC attribute identifies a name as an intrinsic procedure and allows you to use specific names of intrinsic procedures as actual arguments.
>>-INTRINSIC--+-----+--name_list------------------------------->< '- ::-'
If you use a specific intrinsic procedure name as an actual argument in a scoping unit, it must have the INTRINSIC attribute. Generic names can have the INTRINSIC attribute, but you cannot pass them as arguments unless they are also specific names.
A generic or specific procedure that has the INTRINSIC attribute keeps its generic or specific properties.
A generic intrinsic procedure that has the INTRINSIC attribute can also be the name of a generic interface block. The generic interface block defines extensions to the generic intrinsic procedure.
|Attributes Compatible with the INTRINSIC Attribute|
PROGRAM MAIN INTRINSIC SIN, ABS INTERFACE ABS LOGICAL FUNCTION MYABS(ARG) LOGICAL ARG END FUNCTION END INTERFACE
LOGICAL LANS,LVAR REAL(8) DANS,DVAR DANS = ABS(DVAR) ! Calls the DABS intrinsic procedure LANS = ABS(LVAR) ! Calls the MYABS external procedure ! Pass intrinsic procedure name to subroutine CALL DOIT(0.5,SIN,X) ! Passes the SIN specific intrinsic END PROGRAM SUBROUTINE DOIT(RIN,OPER,RESULT) INTRINSIC :: MATMUL INTRINSIC COS RESULT = OPER(RIN) END SUBROUTINE