First Draft: Implicit Type Template Instantiation via Constructors

Meta jared771 at gmail.com
Wed Mar 12 00:20:55 UTC 2025


This DIP is a partial resurrection of DIP 40 
(https://wiki.dlang.org/DIP40) by me and Dennis Korpel. Dennis is 
working on the implementation 
(https://github.com/dlang/dmd/pull/16910) while I am writing the 
DIP.

The purpose of this DIP is to propose a new avenue for Implicit 
Template Instantiation (ITI) via constructors. Currently (that 
I'm aware of) D only does Implicit _Function_ Template 
Instantiation (IFTI); the proposal is to extend this implicit 
instantiation to types as well, via their constructors.

Before this DIP:
```d
struct Pair(T, U)
{
     T t;
     U u;

     this(T t, U u)
     {
         this.t = t;
         this.u = u;
     }
}

void main()
{
     auto p1 = Pair(1, "asdf"); // Error: struct `Pair` is not 
callable using argument types `!()(int, string)`
                                // Candidate is: `Pair(T, U)`
}
```

After this DIP:
```
struct Pair(T, U)
{
     T t;
     U u;

     this(T t, U u)
     {
         this.t = t;
         this.u = u;
     }
}

void main()
{
     auto p1 = Pair(1, "asdf"); // Okay, T is deduced as int and U 
as string
}

```

The DIP:
https://github.com/MetaLang/DIPs/blob/dip1050/DIPs/DIP1050.md


More information about the dip.development mailing list