Aus meiner Sicht dürfte nach dem Anwenden des überladenen Operators (R := ansistring('test2');) fAnyVar nicht 0 werden.
Denke ich falsch, oder ist das ein Fall für den Bugtracker?
Code: Alles auswählen
program project1;
{$mode objfpc}{$H+}
{$MODESWITCH ADVANCEDRECORDS}
type
{ TTestAdvRec }
TTestAdvRec = record
private
fText: ansistring;
fAnyVar: integer;
public
procedure SetString(const AValue: ansistring);
function GetString: ansistring;
end;
operator := (r: ansistring) z: TTestAdvRec;
begin
z.SetString(r);
writeln('setting AnsiString');
end;
{ TTestAdvRec }
procedure TTestAdvRec.SetString(const AValue: ansistring);
begin
fText := AValue;
end;
function TTestAdvRec.GetString: ansistring;
begin
Result := fText;
end;
var
R: TTestAdvRec;
begin
R.fAnyVar := 38;
R.SetString('test1');
Writeln(R.GetString);
Writeln(R.fAnyVar);
R := ansistring('test2'); //<----- löscht die Daten des Records bzw. erstellt eine neue Instanz?
Writeln(R.GetString);
Writeln(R.fAnyVar); //<---- gibt 0
end.