The way you have written it, the T in TCompareFunc<T> is completely unrelated to the T in Sort<T>.
So, irrespective of compiler version, these two unrelated routines cannot work together.
I think you must wrap them in a class or record so there is only a single T known by the two routines.