unnecessary casts

n00b n00b at nospam.com
Wed Jan 30 23:44:29 PST 2013


Le 30/01/2013 17:49, Namespace a écrit :
> Is the compiler (dmd) fit enough to detect and avoid unnecessary casts?
>
> E.g.
> [code]
> void foo(T)(T num) {
> int f = cast(int) num;
> // ...
> }
>
> foo(42); // cast is unnecessary
> foo(4.2); // cast is necessary
> [/code]
>
> Or should I wrote everytime
>
> [code]
> void foo(T)(T num) {
> static if (is(T == int) || isImplicitlyConvertible!(T, int)) {
> int f = num;
> } else {
> int f = cast(int) num;
> }
> // ...
> }
> [/code]
>
> Until now I count on the compiler, that it detect this cases and avoid
> casts. But I'm not 100% sure, so I want to ask.


When the template gets instantiated, the compiler has to determine what 
"cast(int)" exactly means for type T ; if T is int, the obvious answer 
is to do nothing, so I don't see a problem. Just my guess.


More information about the Digitalmars-d-learn mailing list