В любом выражении ТП требуется совместимость типов. Совместимость типов имеет место, если выполняется хотя бы одно из следующих условий:
1) оба типа являются одинаковыми
2) оба типа являются вещественными типами
3) оба типа являются целочисленными
4) один тип является поддиапазоном другого
5) оба типа являются поддиапазоном одного и того же основного типа
6) оба типа являются типами множеств с совместимыми базовыми типами
7) оба типа являются упакованными строковыми типами с одинаковым числом компонент
8) один тип является строковым, а другой - либо строковым, либо упакованным строковым типом, либо типом Char
9) Один тип - Pointer, а другой - любой тип указателя
10) Оба типа являются процедурными типами с тождественными типами результата, с тождественным числом параметров, с тождественными (один в один) типами параметров.
Совместимость по присваиванию необходима с случае использования оператора присваивания или при передаче значений параметров процедурам или функциям.
Значение типа Т2 является совместимым по присваиванию с типом Т1 (т.е. допустимо Т1:=Т2), если выполняется одно из следующих условий:
1. - Т1 и Т2 являются тождественными типами, и ни один из них не является файловым типом или структурным типом, содержащим компоненту с файловым типом на одном из своих уровней.
2. - Т1 и Т2 являются совместимыми порядковыми типами и значения типа Т2 попадают в диапазон возможных значений Т1.
3. - Т1 и Т2 являются вещественными типами и значения типа Т2 попадают в диапазон возможных значений Т1.
4. - Т1 является вещественным типом, а Т2 является целочисленным типом.
5. - Т1 и Т2 являются строковыми типами.
6. - Т1 является строковым типом, а Т2 является типом Char.
7. - Т1 является строковым типом, а Т2 является упакованным строковым типом.
8. - Т1 и Т2 являются совместимыми упакованными строковыми типами.
9. - Т1 и Т2 являются совместимыми типами множеств, и все значения типа Т2 попадают в диапазон возможных значений Т1.
10.- Т1 и Т2 являются совместимыми типами указателей.
11.- Т1 и Т2 являются совместимыми процедурными типами.
12.- Т1 является процедурным типом, а Т2 является процедурой или функцией с тождественным типом результата, с идентичным числом параметров и тождественностью один-в-один между типами параметров.
13.- Объект типа Т1 совместим по присваиванию с объектом типа Т2, если Т2 находится в области определения Т1.
14.- Указатель типа Р2, указывающий на тип объекта Т2, совместим по присваиванию с указателем типа Р1, указывающим на тип объекта Т1, если Т2 лежит в области определения Т1.
На этапе компиляции выдается сообщение об ошибке, если совместимость по присваиванию необходима, а ни одно из условий предыдущего списка не выполнено.