Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Impliziter Cast von Integer zu TIntDynArray? (https://www.delphipraxis.net/193723-impliziter-cast-von-integer-zu-tintdynarray.html)

Rabenrecht 1. Sep 2017 13:20

Delphi-Version: 10 Berlin

Impliziter Cast von Integer zu TIntDynArray?
 
Kann es sein, dass spätestens seit Delphi Tokyo Integer implizit auf TIntDynArray gecastet werden?

Folgender Code mach mir seit dem Update Probleme:

Delphi-Quellcode:
function myFunc(vInt : Integer):Int;overload;
function myFunc(vIntDynArray : TIntDynArray):Int;overload;

[...]

procedure callingProcedure;
var
  vVariant : Variant;
begin
  [...]
  result := myFunc(vVariant); <- hier schreit der Compiler "Doppledeutiger überladener Aufruf von myFunc"
end;
Unter XE5 geht's...

Stevie 1. Sep 2017 13:37

AW: Impliziter Cast von Integer zu TIntDynArray?
 
Zitat:

Zitat von Rabenrecht (Beitrag 1380131)
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz