ushort + ushort = int?

Andrey saasecondbox at yandex.ru
Mon Aug 20 10:29:56 UTC 2018


On Monday, 20 August 2018 at 09:56:13 UTC, Jonathan M Davis wrote:
> It's a combination of keeping the C semantics (in general, C 
> code is valid D code with the same semantics, or it won't 
> compile) and the fact that D requires casts for narrowing 
> conversions. When you add two shorts in C/C++, it converts them 
> to int just like D does. It's just that C/C++ has implicit 
> narrowing casts, so if you assign the result to a short, it 
> then converts the result to short even if that means that the 
> value could be truncated, whereas D requires that you 
> explicitly cast to convert to int rather than silently 
> truncating.
>
> It does prevent certain classes of problems (e.g. there are 
> plenty of bugs in C/C++ due to implicit narrowing conversions), 
> but it can also get pretty annoying if you're doing much math 
> on integer types smaller than int, and you either know that 
> they aren't going to overflow or truncate, or you don't care 
> that they will. But if you're only doing math on such small 
> integeral types occasionally, then it pretty much just means 
> that once in a while, you get briefly annoyed when you forget 
> to add a cast, and the compiler yells at you.
>
> - Jonathan M Davis

Understood.
Is there a workaround to reduce amount of manual casts of input 
types T into output T?
May be one can write some module-global operator "plus", 
"minus"..?

Like in C++:

> template<typename T>
> T operator+(T first, T second)
>{
>    return static_cast<T>(first + second);
>}


More information about the Digitalmars-d-learn mailing list