[fpc-devel] Implicit cast from Char/String to array of Char

Sven Barth pascaldragon at googlemail.com
Mon Feb 25 22:15:57 CET 2019


Am 25.02.2019 um 08:09 schrieb Ondrej Pokorny:
> Hello!
>
> Implicit cast from Char/String to array of Char: is this a wanted 
> behavior or is it a compiler bug?
>
> (Btw. MODE DELPHI behaves the same).
>
> program Project1;
> {$mode objfpc}{$H+}
> procedure A(AC: array of Char);
> var
>   C: Char;
> begin
>   for C in AC do
>     WriteLn(C);
> end;
>
> procedure B(AC: array of Integer);
> var
>   C: Integer;
> begin
>   for C in AC do
>     WriteLn(C);
> end;
>
> begin
>   A('a');  // no error in FPC (error in Delphi)
>   A('ab'); // no error in FPC (error in Delphi)
>   B(1);    // error in FPC & Delphi
> end.
Please note that the error for "B(1)" in FPC is misleading. If you use 
"B(Integer(1))" it will work.
The reason is that both FPC and Delphi allow the passing of singular 
elements to open array parameters however Delphi does not allow constant 
values while FPC does.
Thus it's also clear why "A('a')" is working.
It's unclear however whether "A('ab')" is supposed to be working. I know 
that the compiler has some code to convert a string constant to char 
arrays, but I don't know if this is intended to be used here as well.

Regards,
Sven



More information about the fpc-devel mailing list