On 17.08.23 20:08, Michael Van Canneyt wrote:
[...]
Both FPC and Delphi create different classes for TDoubleBird and TMyDoubleBird.

In Delphi they are not assign compatible, in FPC they are. For example:
var
 a: TDoubleBird;
 b: TMyDoubleBird;
begin
 b:=TMyDoubleBird.Create;
 a:=b; // forbidden in Delphi
 writeln(a is TDoubleBird); // writes false

Bytewise the assignment is ok, but logic wise "a" is no longer a TDoubleBird.

Is this a bug or a feature?

Depends on how you look at it. Double and TMyDouble are assignment compatible. There is no reason why the same should not hold true for TDoubleBird and TMyDoubleBird ?

I guess that is true for specialized arrays, records (non advanced), proc types and pointers, unless I forgot something (maybe helpers?). But classes and interfaces have "is", "as", "class of", and "class vars", where the difference matter.



[...]
Of course, the method addresses are different. Other than that and the
different RTTI (which has 100% the same structure)

The different RTTI has 100% the same structure?
For clarification for others to follow the discussion here is an example:

type
  TBird<T> = class(TPersistent)
  private
    FWing: T;
  published
    property Wing: T read FWing;
  end;

This is allowed in Delphi, but FPC refuses generic templates in published.
The TBird<double>.Wing has a different PPropInfo than TBird<TMyDate>.Wing. That is probably only relevant in some rare cases.


I am inclined to go for feature, but maybe there are arguments to tip the
balance in the direction of bug.

One point where it could wrong, is when you port Delphi code to FPC.
For example this is fine in Delphi:

type
  TBird<T> = class
    class var Cnt: integer;
  end;
  TDoubleBird = TBird<double>;

procedure Fly(b: TDoubleBird);
begin
  inc(b.Cnt); // under Delphi this must be TBird<double>.Cnt
    // not so under FPC
  ...
  if TDoubleBird.Cnt=1 then ...
end;


Mattias

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to