var i: integer; type r1 = record(System.ICloneable) public function Clone: object; begin i := 1; end; end; procedure p1(a: T); where T: System.ICloneable; begin System.ICloneable(a).Clone; end; begin p1(new r1); assert(i = 1); end.