std.sumtype?

Oleg B code.viator at gmail.com
Mon Aug 30 16:54:13 UTC 2021


On Monday, 30 August 2021 at 12:13:56 UTC, Paul Backus wrote:
> On Monday, 30 August 2021 at 11:19:46 UTC, Oleg B wrote:
>> On Monday, 30 August 2021 at 10:50:40 UTC, drug wrote:
>>> A little tip: you can use just `cast()` to remove qualifiers:
>>> ```D
>>> return match!(v => staticIndexOf!(typeof(v), 
>>> T.Types))(cast()val));
>>> ```
>>
>> I'm not sure what with simple `cast()` not `opCast` nor ctors 
>> are called, it depends on code of `SumType`, if it changed 
>> they can be called (not sure). Cast through pointer avoid it. 
>> Or I mistake?
>
> `SumType` does not define any `opCast` overloads, so you don't 
> have to worry about that.
>
> Re: ctors/copying, the [language spec for casts][1] says:
>
>> 10. Casting to a CastQual replaces the qualifiers to the type 
>> of the UnaryExpression.
>>
>> 11. Casting with no Type or CastQual removes any top level 
>> const, immutable, shared or inout type modifiers from the type 
>> of the UnaryExpression.
>
> In other words, casting to a different qualifier does not 
> create a new value; it just causes the compiler to treat the 
> existing value as though it had a different type.
>
> [1]: https://dlang.org/spec/expression.html#CastExpression

Thanks!


More information about the Digitalmars-d mailing list