On 12/21/14 3:23 AM, Jonathan Marler wrote:
As for the typed cast, what about when the function argument is changed from a byte to a short? If the initial caller was using cast(byte) and doesn't change to cast(short), then you are also creating a bug. I feel like you're going to get different bugs either way. Both the typed and auto-typed cast seem to be just as dangerous. That's not really an argument to have auto-cast, I'm just making an observation.
But as the author, you have examined your code, and determined it's OK to have whatever expression you are using cast to a byte. This means you are sure it won't exceed the byte range. I don't see how this is a bug.
I noticed your other comment about wanting a double-typed cast. I could see that being useful especially if we did something like this: When a cast is performed, the source and target type must match the expected types EXACTLY. int y; ushort x = cast(byte, int)y; // cast from int to byte This should definitely produce an error. This code could exist if x was initially a byte and was later changed to a ushort. I think this feature would make casts alot safer because any time a type was changed you would get an error saying you need to go update all your casts. What do you think?
I didn't think of it that way, I would assume that cast(byte, int) would only error if the cast-from type is not int, not if the expression used the result in any way other than a byte.
But it does have appeal. -Steve
