<div dir="ltr"><div class="gmail_extra">Sven, first off, congratulations and we thank you for so much good work. in the future do you see a time when type inference could be used?</div><div class="gmail_extra"><br></div><div class="gmail_extra">S := Add('hello ', 'world');</div><div class="gmail_extra">I := Add(1, 2);<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">For everyone else, I can also imagine:</div><div class="gmail_extra"><br></div><div class="gmail_extra">function Max<T>(const A, B: T): T; begin if A > B then Result := A else Result := B; end;</div><div class="gmail_extra"><div class="gmail_extra">function Compare<T>(const A, B: T): Integer; begin if A > B then Exit(1); if B > A then Exit(-1); Result := 0; end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">Possibly allowing for ...</div><div><br></div></div><div class="gmail_extra">function IListHelper<T>.Sort; begin QuickSort(Compare<T>); end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">Which then brings to mind, will it be possible to get use references to generic routines?</div><div class="gmail_extra"><br></div><div class="gmail_extra">type</div><div class="gmail_extra">  TTransform<T> = function<T>(const A, B: T): T;</div><div class="gmail_extra"><br></div><div class="gmail_extra">var</div><div class="gmail_extra">  Transform: TTransform<T>;</div><div class="gmail_extra">begin</div><div class="gmail_extra">  Transform := Add<String>;</div><div class="gmail_extra">  WriteLn(Transform('hello', 'world'));</div><div class="gmail_extra">  Transform := Min<String>;</div><div class="gmail_extra">  WriteLn(Transform('hello', 'world'));</div><div class="gmail_extra">  Transform := Max<String>;</div><div class="gmail_extra">  WriteLn(Transform('hello', 'world'));</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">output:</div><div class="gmail_extra"><br></div><div class="gmail_extra">helloworld</div><div class="gmail_extra">hello</div><div class="gmail_extra">world</div><div class="gmail_extra"><br></div><div class="gmail_extra">Leading to ...</div><div class="gmail_extra"><br></div><div class="gmail_extra">function Print<T>(const A, B: T; Transform: TTransform<T>);</div><div class="gmail_extra">begin</div><div class="gmail_extra">  WriteLn(Transform(A, B));</div><div class="gmail_extra">end;</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">begin</div><div class="gmail_extra">  Print('hello', 'world', Add); // type inference</div><div class="gmail_extra">  Print('hello', 'world', Min);</div><div class="gmail_extra">  Print('hello', 'world', Max); </div><div class="gmail_extra">end;<br></div><div><br></div><div><div class="gmail_extra">output:</div><div class="gmail_extra"><br></div><div class="gmail_extra">helloworld</div><div class="gmail_extra">hello</div><div class="gmail_extra">world</div></div><div><br></div></div></div>