12.5.5 Formal Interface Types
This rule follows from the rule in 12.5
that says that the category is determined by the one given in the name
of the syntax production. The effect of the rule is repeated here to
give a capsule summary of what this subclause is about.
we're taking advantage of our switch in terminology from “determined
class” to “determined category”; by saying “category”
rather than “class”, we require that any actual type be an
interface type, not just some type derived from an interface type.
formal_interface_type_definition ::= interface_type_definition
The actual type shall be a descendant of every
progenitor of the formal type.
The actual type shall be a limited, task, protected,
or synchronized interface if and only if the formal type is also, respectively,
a limited, task, protected, or synchronized interface.
require the kind of interface type to match exactly because without that
it is almost impossible to properly implement the interface.
type Managed_Task is task interface;
type Work_Item(<>) is new Root_Work_Item with private;
package Server_Manager is
task type Server is new Managed_Task with
entry Start(Data : in out Work_Item);
This generic allows an application to establish
a standard interface that all tasks need to implement so they can be
managed appropriately by an application-specific scheduler.
Extensions to Ada 95