[fpc-devel] bug or feature? type alias
Martin Frb
lazarus at mfriebe.de
Sun Nov 1 23:23:49 CET 2026
TFoo = type TBar
creates a new unique (non assignment compatible) type. At least for
non-base types (e.g records).
In the below that works, except the new type is not entirely new.
If the new type defines another type (nested), then that nested type is
still compatible with the nested type of the original.
But non-commented assignments compile. (3.3.1)
Of course fields between the original and the alias are also assignment
compatible.
So this may well be intended.
Just wanted to check.
program Project1;
{$Mode objfpc}
type
TRec1 = record A: integer; end;
TRec2 = type TRec1;
TFoo1 = record
a: integer;
b: record x: integer; end;
end;
TFoo2 = type TFoo1;
TBar1 = class
public type
Tbase = record A: integer; end;
TInner = type TBase;
end;
TBar2 = type TBar1;
var
r1: TRec1;
r2: TRec2;
f1: TFoo1;
f2: TFoo2;
i1: TBar1.TInner;
i2: TBar2.TInner;
begin
//r1 := r2;
//f1 := f2;
f1.b := f2.b;
i1 := i2;
end.
More information about the fpc-devel
mailing list