Explicit implicit conversions

Quirin Schroll qs.il.paperinik at gmail.com
Thu Feb 6 14:45:43 UTC 2025


On Thursday, 6 February 2025 at 03:03:05 UTC, Paul Backus wrote:
> On Thursday, 6 February 2025 at 02:32:54 UTC, Quirin Schroll 
> wrote:
>> The idea is to allow, e.g. `Type(expression)` evaluate to 
>> `expression` with a static type of `Type`.
>
> Unfortunately this syntax conflicts with constructors and 
> `static opCall`, so it is probably a non-starter.
>
>> Of course, that lowering can be provided by a function 
>> template:
>> ```d
>> auto ref R implicitCast(R, T)(auto ref T x) => x;
>> ```
>> The main issue with that is that it’s much wordier.
>
> Do we expect this to be used often enough that its length will 
> be a big deal?

The deal is that something that’s that trivial shouldn’t require 
a workaround, not even an easy one. It would have to be in 
object.d to be easily used, otherwise I’d rather two-line it with 
a local variable than two-line it with an `import` statement.

Really, there’s almost no benefit anymore if you have to import:
```d
import std.conv : implicitCast; // meh
f(x.implicitCast!R);
```


More information about the dip.ideas mailing list