Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Impliziter Cast von Integer zu TIntDynArray?

  Alt 1. Sep 2017, 14:37
Kann es sein, dass spätestens seit Delphi Tokyo Integer implizit auf TIntDynArray gecastet werden?
Nein, aber Variant konnte schon immer implizit auf ein dynamisches Array zugewiesen werden (siehe Variants._VarToDynArray), versuch mal diesen Code hier unter XE5 zu kompilieren:

Delphi-Quellcode:
var
  x: Integer;
  y: TIntegerDynArray;
  v: Variant;
begin
  x := v;
  y := v;
Du wirst merken, dass das funktioniert (das kompilieren). Und dann wird dir klar, dass hier in einer neuen Version ein Bug gefixt wurde.
Denn dieser Aufruf war schon immer zweideutig - der Compiler hat nur fälschlicherweise den impliziten Cast von Variant auf Integer dem von Variant auf ein dynamisches Array vorgezogen bzw den Overload mit einem dynamischen Array bei einer als overload markierten Routine ignoriert (kannst du testen, indem du den Integer overload und das overload der anderen Version mal auskommentierst und siehst, dass der myFunc aufruf nun kompiliert.

Ich hab kein Ticket für die genaue Problematik gefunden, aber es könnte mit diesem zusammenhängen: https://quality.embarcadero.com/browse/RSP-12780
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 1. Sep 2017 um 14:59 Uhr)
  Mit Zitat antworten Zitat