The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

    • RT @WietsedeBoer2: Als (grond)water zo schaars is, waarom krijgt dit bedrijf dan een vergunning voor oppompen van 500.000 m3 water? Ergens… 3 hours ago
    • RT @bitsoffreedom: Stel vragen! En belangrijker, dit is gewoon iets voor het kabinet om netjes te regelen, dat is beter voor de ondernemers… 3 hours ago
    • RT @Crash2411: This tweet was postmarked last month 3 hours ago
    • RT @Afelia: Mailadresse. Die politische Debatte über digitale Bildung hängt solide 15 Jahre hinterher. 3 hours ago
    • RT @TerliWetter: “Nahezu sein gesamter Maisbestand hat sich in Popcorn verwandelt. Schuld ist wohl die aktuelle Hitzewelle, die deutschland… 3 hours ago
  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 2,052 other followers

Yes Delphi does some type inference on generic method calls

Posted by jpluimers on 2020/07/23

Delphi does indeed so some type inference as Primoz found out below. It has been doing this for a long time, improved over time, but has a long road ahead.

One odd thing is that generics (and the majority of inference support) were introduced in Delphi 2009 ([WayBack] Generics with Delphi 2009 Win32), but the inference was already documented in Delphi 2007: [WayBack] Delphi 2007 – Declaring Generics: Parameterized Types

This is a reminder to myself to write some more example code on what kinds of inference work and which do not, especially because of the comments from David Heffernan, Marco Cantu and Stefan Glienke, especially since the improvement over time has been small. I am curious to see how the promised “working on it” by now lives up to reality.

David Heffernan
This is a rare piece of code where type inference actually works. Mostly it does not which is very frustrating.

It’s a little ironic that you ask why you don’t need to include <T>. Normally people ask about the much more frequent instances where you do need to include <T> because the compiler’s type inference is so weak.

David Heffernan
+Marco Cantù Much more commonly there are times when you want the compiler to infer the type, but it won’t. It would really make a difference to us if the compiler was better at this.

Marco Cantù
+David Heffernan I tend to agree the compiler should be much better at type inference. Working on it!

Stefan Glienke
Infering the generic argument from a constructed generic type would be great.

GuessTheType<T>(const x: TArray<T>);

  a: TArray<Integer>;

does not work although the compiler could infer the parameter for GuessTheType from its x parameter but currently it does not know that a originally was a TArray<T> (yes, I know array of T as signature works but that is a different thing).

P.S. +Marco Cantù btw how hard can it be to finally implement generic standalone routines without that ugly static type? Probably one of the highest voted feature requests:

Source: [WayBack] Anybody here knows since when we don’t have to write when calling generic ProcSomething(param: T)? It was brought to my attention today that the… – Primož Gabrijelčič – Google+


One Response to “Yes Delphi does some type inference on generic method calls”

  1. LachlanG said

    Delphi.NET received generics prior to Delphi 2009. Although Delphi 2006 was the last release of Delphi.NET there were still many references to it in the documentation in Delphi 2007.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: