var o: object; procedure p(a: System.Func; b:System.Func; c: X); begin o := a(c); end; begin p(x -> x, x -> 1.0, 4.0); assert(Round(real(o)) = 4); end.