First Draft: Implicit Conversion of Template Instantiations

Timon Gehr timon.gehr at gmx.ch
Mon Mar 18 00:32:35 UTC 2024


On 3/16/24 16:50, Walter Bright wrote:
> https://github.com/WalterBright/documents/blob/9dba63a4c2887bdb2b988c354ebb0d6bb44c4968/templatecast.md
> 
> DConf: https://dconf.org/2024/online/index.html#walterb

In general: Yes, I think something along those lines would be great.


 From my DConf question:

```d
struct S(alias a){
     void f(){
         a();
     }
}

void main(){
     import std.stdio;
     S!({ writeln("first"); }) s1;
     S!({ writeln("second"); }) s2 = s1; // ok
     s1.f(); // first
     s2.f(); // second
     pragma(msg, is(typeof(s1):typeof(s2))); // true
}
```

I think this is a bit dangerous. (And on stream you seemed to argue that 
this has the potential to kill the proposal.)

I think the way to fix it would be to simply use a more strict standard 
than "must belong to the same template". Add an opt-in annotation to 
template parameters that indicates "this parameter may change in a const 
conversion". For other parameters, you still require them to match by 
default.

This way, people can opt into the behavior.



More information about the dip.development mailing list