type IEq = interface function equal(x, y: T): boolean; end; Ord = abstract class where EqT: IEq, constructor; public function equal(x, y: T1): boolean; virtual; begin var eqInst := new EqT; Result := eqInst.equal(x, y); end; end; function equal(v1, v2: T): boolean; where EqT: IEq, constructor; begin var eqtinstance := new EqT; Result := eqtinstance.equal(v1, v2); end; begin end.