> -- Oleg N. Cher писал(а):
> Просто для удобства и более чистого синтаксиса в КП разрешается опускать ^Так что это операция "копирование строк по указателю".

Возражаю.
> -- Language Report 8.1 писал(а):
> If p designates a pointer, p^ denotes the variable which is referenced by p. The designators p^.f, p^[e], and p^$ may be abbreviated as p.f, p[e], and p$, i.e., record, array, and string selectors imply dereferencing. Dereferencing is also implied if a pointer is assigned to a variable of a record or array type (Ch. 9.1), if a pointer is used as actual parameter for a formal parameter of a record or array type (Ch. 10.1), or if a pointer is used as argument of the standard procedure LEN (Ch. 10.3).
Это - закрытый (исчерпывающий) список случаев, когда разыменование подразумевается и может быть опущено. Приведенный мной пример не входит в этот список. В левой части оператора присваивания указатели не разыменовываются по умолчанию.

Если строго истолковывать, то получается... ничего не получается: невозможно присвоить массив t^ указателю s. Невозможно присвоить строку "Почему это работает?!" указателю s.

Документ Platform-specific issues, который вводит понятие untagged, как я понимаю, никак не переопределяет правила совместимости по присваиванию.

Так что по-прежнему открыт вопрос: почему это работает - где это определено (кроме самого текста компилятора)?

P.S. Эта магия используется в (Lin)HostDialog.ForkOfChild, которую мы с Иван Андреичем составляли.