> -- Сергей Губанов писал(а):
> ... и приведения типов в процедуре Add делать не надо.Просто нужно было получить список, корень которого имеет тип ItemExt. Вы правы, можно сделать переменную типа Item в качестве временного корня, а потом присвоить её значение в нужную переменную, применив охрану типа один раз.

Решение с подставным корнем укоротило процедуру Add почти вдвое: не надо обрабатывать особый случай (list = NIL), всё делается одним циклом без особых случаев.

При отрубании головы списка хотел использовать такой код:## Код:
```
list := list.next
```
Компилятор ругается, что list имеет тип ItemExt, а list.next - просто Item. Поставил охрану:## Код:
```
list := list.next (ItemExt)
```
После этого неоднократно столкнулся с ошибкой времени выполнения при охране типа в случае, когда list.next = NIL. Пришлось писать так:## Код:
```
IF list.next # NIL THEN list := list.next (ItemExt) END
```

Где-то здесь обсуждалось недавно, какой тип имеет NIL. Судя по данному случаю, NIL мог бы быть любого типа, присвоение ведь возможно. Мне кажется, охрана NIL не должна бы давать ошибку, результат охраны ведь является совместимым с указанным типом. Вот если бы я к полям или методам обращался, тогда другое дело.