Inferred Type for Explicit Cast
Steven Schveighoffer via Digitalmars-d
digitalmars-d at puremagic.com
Fri Dec 19 07:17:03 PST 2014
On 12/18/14 6:18 PM, Adam D. Ruppe wrote:
> On Thursday, 18 December 2014 at 23:06:12 UTC, ketmar via Digitalmars-d
> wrote:
>> the only thing this will help is to hide bugs, i believe.
>
> On the contrary, I find explicit casts hide bugs. Suppose you write:
>
> size_t a = cast(int) b;
>
> It will compile and run. It'll mostly work. But the cast to int probably
> wasn't intended (it was probably written in 32 bit code and not
> correctly ported to 64 bit).
>
> How often do we also write auto a = cast(T) b;? The difference would be
> the type is written on the left side instead of the right. Might make an
> important differnce when calling functions.
>
> I think the auto cast is a win all around.
I have to agree with ketmar. Cast needs fixing, but this is not it. We
need more control over what is cast, not less control.
Your example unwittingly shows the issue :) casts are blunt instruments
that force the compiler to abandon it's checks. I'm not as concerned
about a changing it's type as I am about b. Change the type of b, and
the compiler still happily generates possibly disastrous code.
At this point, we can only say "abandon ALL checks." We can't finely
tune this. I think we need something more along the lines of C++'s
casting directives.
And in answer to your above code snippet, I see no benefit for:
size_t a = cast(auto) b;
over:
auto a = cast(size_t) b;
-Steve
More information about the Digitalmars-d
mailing list