var i: integer; type Generic1 = class end; Generic2 = class end; ConvTarget = class static function operator implicit(o: Generic2>): ConvTarget; where T1, T2: record; begin Result := new ConvTarget; i := 1; end; end; begin var a: Generic2>; var o: ConvTarget := a; assert(i = 1); end.