# Procedures that Require Explicit Interfaces

When a procedure is referenced, it must have an explicit interface in the following cases:

- If a reference to the procedure appears in one of the following:

  - An actual argument that is specified with a keyword

  - In a context that requires it to be PURE

- If the procedure has a dummy argument that is one of the following:

  - An object that has the ALLOCATABLE, ASYNCHRONOUS, OPTIONAL, POINTER, TARGET, VALUE, or VOLATILE attribute

  - An assumed-shape array

  - A polymorphic object (an object declared with a CLASS statement)

  - A coarray (an object declared with a CODIMENSION attribute or statement)

  - An object of a parameterized derived type

  - An object of assumed-rank or assumed-type

- If the procedure has any of the following:

  - A result that is an array, or a pointer, or is allocatable (functions only)

  - A result whose length is neither assumed nor a constant (character functions only)

- If a reference to the procedure appears as follows:

  - With an argument keyword

  - As a reference by its generic name

  - As a defined assignment (subroutines only)

  - In an expression as a defined operator (functions only)

  - In a context that requires it to be pure

- If the procedure is elemental

- If the procedure has the BIND attribute

Statement functions do not require an explicit interface.

Parent topic: Procedure Interfaces

## See Also

Optional arguments
Array arguments
Pointer arguments
CALL for details on argument keywords in subroutine references
Function references for details on argument keywords in function references
Pure procedures
Elemental procedures
Procedure Interfaces
Defining Generic Names for Procedures for details on user-defined generic procedures
Defining Generic Operators for details on defined operators
Defining Generic Assignment for details on defined assignment
Parameterized Derived-Type Declarations