<div dir="ltr"><div class="gmail_extra"><div>> Unlike Delphi, we have TCompare class and TEquals class, which is used<br></div><div>> for manual interfaces (together with TRawInterface and TComTypeSizeInterface).</div><div>> Additionally (unlike in Delphi which has hidden regular functions for this in</div><div>> implementation section with fake self parameter) TCompare and TEquals can</div><div>> be used in custom comparers.</div><div><br></div><div>I've just like to point out that with Svens new support for generic functions, we actually have template like functionality in Free Pascal. You can now write functions which will verify at compile time the support of a method or operator for a particular type. This somewhat obviates the need to register or pass compare or equal functions or interfaces.</div><div><br></div><div>For example, you can now write a in a type "TArray<T> = array of T" sorting implementation:</div><div><br></div><div><div>procedure Sort<T>(var Items: TArray<T>);</div><div>var</div><div>  A, B: T;</div><div>  I: Integer;</div><div>begin</div><div>  for I := Low(Items) to High(Items) - 1 do</div><div>  begin</div><div>    A := Items[I];</div><div>    B := Items[I + 1];</div><div>    if A > B then </div><div>    begin</div><div>     Items[I] := B;</div><div>     Items[I + 1] := A;</div><div>    end;</div><div>  end;</div><div>end;</div></div><div><br></div><div>Obviously this is a terribly inefficient sorting algorithm, but it demonstrates the feature clearly. The condition "if A > B then" will be cause the compiler to verify at compile time whether or not the T being used support comparison through the "<" operator. The same kind of support extends to the "=" operator as well.</div><div><br></div><div>If you using symbols are unclear, the above routine could be altered to use a CompareTo method. For example:</div><div><br></div><div>  if A.CompareTo(B) < 0 then</div><div><br></div><div>This would then cause the compiler to check the type B for a CompareTo function with the appropriate signature. This can then be paired with type helpers to add CompareTo methods to any type including the intrinsic ones.</div><div><br></div><div>Just so you know ...</div></div></div>