As I'm currently on my phone, I can't test this, but I think that because they are based on pointers (which also using the var parameter implicitly is), neither of those approaches are actually generalizable to bitfields, so when accessing the members of a bit packed record probably all of these methods would fail, as bits are not pointer addressable.
Also the proposals so far assume a certain layout for enema, which may also not be applicable. Eg.g the enum
TTest = (testA=1, testB=1023)
Is neither binary not of each other nor xor 1.
A solution that's always applicable would be something using a function result and high and low
function Flip<T>(curr: T): T
begin
If Curr = Low(T) then
Result:=high(T)
else if Curr=high(T) then
Result:=low(T)
Else
Raise Exception.Create('unknown enum state)
end;