type t1 = class procedure p1(f: T->T2); begin assert(f(default(T)).ToString() = '22'); end; end; procedure p1; begin var o: t1; o.p1(b->'22'); // ok end; procedure p2; begin var o: t1 := new t1; o.p1(b->'22'); end; begin p2&; end.