type t1 = class function f(o: T2) := default(T); end; function f: T; begin var o: t1 := new t1; Result := o.f(0); end; begin assert(f& = 0); end.