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