Intel® Fortran Compiler 17.0 Developer Guide and Reference
A procedure component or a binding procedure (type-bound procedure) can be declared to have a passed-object dummy argument. This kind of argument is associated with a special actual argument, which is not explicitly written in the actual argument list. The appropriate actual argument is then added to the argument list.
A passed-object dummy argument must be a scalar. It must not be a pointer, must not be allocatable, and all its length type parameters must be assumed. Its declared type must be the type in which the component or binding procedure appears.
The passed-object dummy argument must be a scalar, nonpointer, nonallocatable dummy data object. Its declared type must be the type in which the component or binding appears. All of its length type paramaters must be assumed.
The determination of the passed-object dummy argument depends on the following:
The PASS and NOPASS attributes specified or in effect
The interface of the procedure component or binding procedure
The following rules apply to PASS and NOPASS:
PASS and NOPASS are mutually exclusive. You can only specify one of these attributes for the same procedure component or binding.
If you specify PASS (arg-name), dummy argument arg-name is the passed-object dummy argument. The interface of the procedure pointer component or binding procedure must have a dummy argument named arg-name.
If NOPASS is specified, there is no passed-object dummy argument.
NOPASS must be specified if the procedure component or binding procedure has an implicit interface.
If you do not specify PASS or NOPASS, or you specify PASS without arg-name, the first dummy argument of a procedure pointer component or binding procedure is the passed-object dummy argument. In this case, there must be at least one dummy argument.