Aber steht das irgendwo geschrieben, dass es so ist? Oder gibt es vielleicht sogar einen Grund?
Unter
Prozeduren und Funktionen überladen steht:
Zitat von
DocWiki:
Wenn die Eindeutigkeit gewährleistet ist, ruft der Compiler in diesen Fällen die Routine auf, deren Parametertyp für den Wertebereich der tatsächlich übergebenen Parameter mindestens erforderlich ist.
Ok, bei ShortInt oder Integer ist das relativ klar, wenn ich 24 habe, dann passt das schon in ShortInt. Bei 246 nicht mehr und er nimmt Integer.
Bei nil ist die Reihenfolge ein bisschen wirr und zwar wie folgt (durch Testen rausgefunden
):
typisierter Pointer (E2251 bei zwei unterschiedlichen)
untypisierter Pointer
TObject Nachfahre (E2251 bei zwei unterschiedlichen)
TObject
IInterface Nachfahre (E2251 bei zwei unterschiedlichen)
IInterface
Klassenreferenz (E2251 bei zwei unterschiedlichen)