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.