On Friday, 7 June 2013 at 21:42:05 UTC, Jesse Phillips wrote:
On Friday, 7 June 2013 at 21:34:00 UTC, Mrzlga wrote:
A reason for cast(signed) is to discourage the user from writing:

   cast(int) x;

Because we can't grep for the word "signed",
We have to search for "cast( )" only!

   cast(int) x    // hides the intention, hard to search for!

Yet we can easily grep for:

   cast(signed)

Not convenient, but:

    cast(Signed!(typeof(x))

How about this: if `Foo` is a template with a single type parameter that returns a type, writing `cast(Foo)bar` will be parsed as `cast(Foo!(typeof(bar))bar`.

This will allow as to write `cast(Signed)x` - no need for extra keywords - and it will also allow us to write more generic things, like `cast(Nullable)(x)` will return a `typeof(x)` `Nullable` that holds the value of `x` - whatever that value may be.

I've written a simple function that does that:

    auto Cast(alias Template,T)(T source){
        return cast(Template!T)(source);
    }

And it works, but not as good as the template solution since `typeof(Cast!Nullable(0))` returns `Template!(int)` instead of `Nullable!(int)`.

Reply via email to