compilers, so it is not supported.
* f18 doesn't impose a limit on the number of continuation lines
allowed for a single statement.
+* When a type-bound procedure declaration statement has neither interface
+ nor attributes, the "::" before the bindings is optional, even
+ if a binding has renaming with "=> proc".
+ The colons are not necessary for an unambiguous parse, C768
+ notwithstanding.
### Extensions supported when enabled by options
// R749 type-bound-procedure-stmt ->
// PROCEDURE [[, bind-attr-list] ::] type-bound-proc-decl-list |
// PROCEDURE ( interface-name ) , bind-attr-list :: binding-name-list
+// The "::" is required by the standard (C768) in the first production if
+// any type-bound-proc-decl has a "=>', but it's not strictly necessary to
+// avoid a bad parse.
TYPE_CONTEXT_PARSER("type bound PROCEDURE statement"_en_US,
"PROCEDURE" >>
(construct<TypeBoundProcedureStmt>(
"," >> nonemptyList(Parser<BindAttr>{}), ok),
localRecovery("expected list of binding names"_err_en_US,
"::" >> listOfNames, SkipTo<'\n'>{}))) ||
+ construct<TypeBoundProcedureStmt>(construct<
+ TypeBoundProcedureStmt::WithoutInterface>(
+ pure<std::list<BindAttr>>(),
+ nonemptyList(
+ "expected type bound procedure declarations"_err_en_US,
+ construct<TypeBoundProcDecl>(name,
+ maybe(extension<LanguageFeature::MissingColons>(
+ "type-bound procedure statement should have '::' if it has '=>'"_port_en_US,
+ "=>" >> name)))))) ||
construct<TypeBoundProcedureStmt>(
construct<TypeBoundProcedureStmt::WithoutInterface>(
optionalListBeforeColons(Parser<BindAttr>{}),