you wrote 17 lines
David Butler wrote:
> {$WRITEABLECONST OFF}
>
> procedure TestBuf(const Buf; Size: Integer);
> begin
> end;
>
> const A : Byte = 1;
From this point A is treated as a normal variable with an initial
assignment...
>
> begin
> TestBuf(A, 1);
... so it is not const here.
It is perfectly legal to pass a "var" to a "const". The problem is that FPC thinks we are trying to change A.
Show quoted text 8 lines
Guess if you would substitute the line
> const A : Byte = 1;
with
> const A = 1;
It should work. AFAIR, typed constants are treated exactly as variables
with an initial value.
Exactly. If it is treated like a normal variable, why the error message?
The problem is not with the "const A" declaration, the problem is with the the call to TestBuf not allowing a "constant variable" to be passed (like Delphi rightly does).
Although the TestBuf call compiles with your suggested "const A = 1" declaration in FPC, it doesn't make sense (and it rightly doesn't compile in Delphi).
I don't want to say FPC should be doing everything the way Delphi does, but in this case it makes sense, in my opinion.
Regards
David