J3/13-219
To: J3
From: Van Snyder
Subject: procedure designator as procedure pointer target, etc.
Date: 2013 December 20
Title: procedure designator as procedure pointer target, etc.
Submitted by: Van Snyder
Status: For consideration
Basic functionality: Allow all forms of non-generic procedure designator
as a procedure pointer target, actual argument, or specification of an
explicit interface.
Rationale: In addition to the usual reasons for procedure pointers and
procedure arguments, procedure pointers and procedure arguments
facilitate hoisting the decision which procedure to invoke out of a loop
or procedure. One form of procedure designator, viz. data-ref%binding,
is not allowed. This would be useful in general, and especially so if
the procedure pointer object is a component of the type of data-ref.
Other procedure designators are already allowed in the requested
contexts.
Estimated impact: Minor
Markham M6 conformance: Remove simple deficiency, inconsistency and
discrepancy.
Detailed specification: Allow as a procedure
pointer target, actual argument, or specification of an explicit
interface in a procedure declaration statement. If
is %binding, shall not be
polymorphic. The designator shall not be generic.
Draft edits: To estimate scope of project
Simplify R740 to
R740 <>
<>
Insert a constraint
C729a (R740) If is %,
shall not be polymorphic, shall not be
generic, and shall have explicit interface.
Replace R1212 with
R1212 <>
<>
<>
Insert constraints:
C1222a (R1212) shall designate a procedure that
has explicit interface.
C1222b (R1212) If is %,
shall not be polymorphic and shall not be
generic.
C1222c (R1212) If is the of a
procedure declared by a , it shall be
accessed by use or host association, or be previously declared
within the same scoping unit.
Insert a paragraph after 12.4.3.6p3
"If appears and consists of , it
specifies an explicit specific interface (12.4.3.2) for the declared
procedures or procedure pointers."
Simplify R1223 to
R1223 <>
<>
<>
<> \obs{}
Insert a constraint
C1235a (R1223) If is %,
shall not be polymorphic and shall not be
generic.