Es gibt halt keine Typüberprüfung, und dann gilt wohl folgendes:
"Dynamic arrays are reference counted. Calling setLength(myDynamicArrayVariable, 0) virtually does myDynamicArrayVariable := nil and decreases the reference count."
Ist aus dem Link von Theo in der ersten Antwort.
Die Zuweisung von nil setzt also die Anzahl Arrayelemente auf 0.
https://wiki.freepascal.org/Dynamic_array
Eigentlich denke ich auch, dass das nicht erlaubt sein sollte. Die Referenzzählung ist bzw. sollten Compilerinternas sein, auf die man so keinen direkten Zugriff hat. Aber vermutlich gibt es auch irgendeinen Spezialfall, wo man das sinnvoll einsetzen kann.
--
Zurzeit verwende ich Pointer recht intensiv, um Binärdaten zu verarbeiten. Da ist Typsicherheit nicht sinnvoll, da sich die Typen in den Daten erst beim Parsen ergeben. Ein häufiger Fehler von mir dabei ist, dass an der falschen Stelle Werte statt Adressen übergeben werden oder die Adresse eines Pointers anstatt die Pointerreferenz übergeben wird. Ich denke da sollte der Compiler unterstützen und Zuweisungen nur erlauben, wenn es sich um die gleiche Art Adresse/Wert handelt. Also dass ein Ordinalwert nicht einfach einem Pointer zugewiesen werden kann, die Adresse eines Pointers nicht einem Pointer und ein Pointer nicht einem Pointer auf einen Pointer.
@PascalDragon: Überseh ich da etwas?