tw20594.pp 1023 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. { %norun}
  2. { %OPT=-Sew -vw}
  3. {$MODE delphi}
  4. type
  5. TTestRec1 = record
  6. A, B: Integer;
  7. end;
  8. TTestRec2 = record
  9. A, B: Integer;
  10. class operator Explicit(const rec: TTestRec2): ShortString;
  11. end;
  12. TTestRec3 = record
  13. A, B: Integer;
  14. function ToString: ShortString;
  15. end;
  16. TTestRec4 = record
  17. A: Integer;
  18. function ToString: ShortString;
  19. var B: Integer;
  20. end;
  21. class operator TTestRec2.Explicit(const rec: TTestRec2): ShortString;
  22. begin
  23. with rec do WriteStr(Result, A, ':', B);
  24. end;
  25. function TTestRec3.ToString: ShortString;
  26. begin
  27. Result := ShortString(TTestRec2(Self));
  28. end;
  29. function TTestRec4.ToString: ShortString;
  30. begin
  31. Result := ShortString(TTestRec2(Self));
  32. end;
  33. const
  34. r1: TTestRec1 = (A: 1; B: 2);
  35. r2: TTestRec2 = (A: 3; B: 4);
  36. r3: TTestRec3 = (A: 5; B: 6);
  37. r4: TTestRec3 = (A: 7; B: 8);
  38. begin
  39. Writeln(ShortString(r2));
  40. Writeln(SizeOf(TTestRec1) = SizeOf(TTestRec2));
  41. Writeln(ShortString(TTestRec2(r1)));
  42. Writeln(r3.ToString);
  43. Writeln(r4.ToString);
  44. end.