Это, кажется, делает это:
if (PTypeInfo(TypeInfo(TAlignment))^.Kind = tkEnumeration) and (Value.TypeInfo.Kind = tkInteger ) then
case System.TypInfo.GetTypeData(TypeInfo(TAlignment))^.OrdType of
otUByte, otSByte: PByte(@A)^ := Value.AsInteger;
otUWord, otSWord: PWord(@A)^ := Value.AsInteger;
otULong, otSLong: PInteger(@A)^ := Value.AsInteger;
end
else
A := Value.AsType<TAlignment>();
, где TAlignment также может быть T в универсальной функции.
(Скопировал идею из TRttiEnumerationType.GetValue)