Вопрос сформурлируй конкретно.
Если вопрос содержится в сабже, то я отвечу так:
Вообще, я думаю, что работать будет всегда.
С другой стороны, иностранные знакомые ГСерг'а говорили, что не всегда. Возможно, знакомые просто ошиблись.
Прежде всего, давай уясним, что происходит. Имеет место быть баг компилятора: вместо того, чтобы выдать сообщение об ошибке, компилятор успешно компилирует этот код так, как если бы вместо arr был указатель на SA-дескриптор (ну изнутри так и есть).
Т.е. такое поведение жестко зашивается в код. Исходя из этого, надо думать, что вопрос "всегда ли это будет работать" надо задавать применительно не к нескольким попыткам запуска одной и той же такой программы, а к нескольким попыткам компиляции.
Т.е. иными словами: "Всегда ли это скомплируется так, как я ожидаю".
Я не могу быть уверенным на этот счёт, но я думаю, что всегда. Ну, возможно от SP зависит, хотя вряд ли.
С другой стороны, я ещё раз настоятельно рекомендую две вещи:
- Писать не Not(x) = -1, а Not(Not(x)) = 0. И вообще использовать Not(Not(x)) вместо ArrPtr
- Всё-таки помнить, что это баг, и в ответственных местах не прибегать к его использованию.