Alright, agreed that I am responsible for the call, and for overwriting "a".
But the compiler expects that I don't do it and that "a" remains unchanged. Currently everything works, but can we exclude that a future optimisation relies on "a" being unchanged ?
It seems you still have not understood yet so help me to help you.
In what line of code is "a" changed?
procedure Add(const a, b: Integer; out c: Integer); inline;
begin
c := a + b;
end;
So if you want that "a" stay unchanged, that you already have done since nothing write to "a", right?
You have 3 arguments, each of them can have the same reference but treated internal as unique variables where "a" does know nothing about "b" and so on.
Equal how you watch on it the result stay same, the person that uses your method needs a 1 week training to know that you as the inventor of that method wants maby 3 different arguments or 2 same or or or .... as often you change your mind what you actually want my saying stays same