Intel® Fortran Compiler 16.0 User and Reference Guide
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.