Quick start manual

5-38
Delphi Language Guide
Type compatibility and identity
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.
Assignment-compatibility
Assignment-compatibility is not a symmetric relation. An expression of type T2 can
be assigned to a variable of type T1 if the value of the expression falls in the range of
T1 and at least one of the following conditions is satisfied.
T1 and T2 are of the same type, and it is not a file type or structured type that
contains a file type at any level.
T1 and T2 are compatible ordinal types.
T1 and T2 are both real types.
T1 is a real type and T2 is an integer type.
T1 is PChar, PWideChar or any string type and the expression is a string constant.
T1 and T2 are both string types.
T1 is a string type and T2 is a Char or packed-string type.
T1 is a long string and T2 is PChar or PWideChar.