Type Compatibility Every type is compatible with itself. Two distinct types are compatible if they satisfy at least one of the following
conditions.
They are both real types.
They are both integer types.
One type is a subrange of the other.
Both types are subranges of the same type.
Both are set types with compatible base types.
Both are packed-string types with the same number of characters.
One is a string type and the other is a string, packed-string, or Char type.
One type is Variant and the other is an integer, real, string, character, or Boolean type.
Both are class, class-reference, or interface types, and one type is derived from the other.
One type is PChar or PWideChar and the other is a zero-based character array of the form
array[0..n]
of
PChar or PWideChar.
One type is Pointer (an untyped pointer) and the other is any pointer type.
Both types are (typed) pointers to the same type and the
{$T+}
compiler directive is in effect.
Both are procedural types with the same result type, the same number of parameters, and type-identity between
parameters in corresponding positions.