On Wednesday, 3 May 2023 at 09:03:38 UTC, Dom DiSc wrote:
I know, (c) is a constructor call, but for basic types that's the same as (a) isn't it?

No, a cast allows for overflow `cast(ubyte) 256`, while the constructor needs an integer that fits. `ubyte(256)` is an error.

If t provides a constructor for typeof(x) and x provides opCast to type t, which one is called?

When casting, opCast has precedence over a constructor.

Does all three forms work if only the constructor or only the opCast is provided?

A constructor call will not be lowered to opCast, but a cast can be lowered to a constructor call.

And is (b) always equivalent to (a)?

C style cast syntax is not allowed in D.


Reply via email to