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:
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