type of
ist einfach nur ein Bug und ich möchte jedem davon abraten, das zu nutzen.
Ein Typ, der mit
type of
deklariert ist, wird vom Compiler als TypeKind tkClassRef behandelt.
Delphi-Quellcode:
uses
TypInfo;
type
Special = type Cardinal;
CardinalType = type of Cardinal;
var
c: Cardinal;
s: Special;
ct: CardinalType;
tk: TTypeKind;
begin
Writeln(GetEnumName(TypeInfo(TTypeKind), Ord(GetTypeKind(CardinalType))));
ct := Cardinal; // WAT?!
ct := Special; // BOOM!
end.
Wenn man mal beim Debuggen über die Variable vom Typ ct geht, sieht man, dass es ein Referenz und kein Ordinaltyp ist (vorm Zuweisen zeigts nil an und nicht 0).
Dass man trotzdem Ordinalvariablen zuweisen kann, liegt daran, dass es nunmal bugged ist.