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.