Selbst wenn der Integer als CONST-Referenz übergeben würde, kann man den Wert dennoch ändern, denn den Pointer hat man dann und ignoriert einfach das CONST.
VAR und OUT sind immer Referenzen.
CONST sagt nur dem Compiler, dass es nicht verändert werden soll, aber nichts darüber, ob als Referenz oder Wert.
CONST und IN/OHNE arbeiten also gleich und bei CONST wird nur eine Compilerprüfung aktiviert, welche man böswillig umgehen könnte.
Bei IN/OHNE ist endweder nur der lokale Wert änderbar, oder es wird ein COPY bei Prozedureintritt, bzw. später als Copy-On-Write implementiert.
Achtung, wenn ein älterer Compiler das [Ref] noch nicht kennt, aber Attribute schon implementiert sind, dann ignoriert er das einfach und gibt nichtmal eine Warnung raus.
Genauso wie bei [Weak] und [Unsave].