What the heck am i doing wrong? I'm just trying to create a 8 bit unsigned variable.

Ali Çehreli acehreli at yahoo.com
Sun May 18 17:35:01 UTC 2025


On 5/16/25 12:19 PM, H. S. Teoh wrote:

 > Basically, `a + 5` gets promoted to int, and that's why it can't be
 > assigned back to `a`.  (Don't ask me why, that's just the way it is and
 > Walter has refused and probably will continue to refuse to change it.)

Overloaded functions must also be considered. I doubt there is any code 
out there that would start behaving unexpectedly with such a change but 
the following code might be dispatched to another function:

   foo(a + 5);

Related: Template instantiation...

And what if ubyte and int appeared in the same expression:

   int i;
   a + 5 + i;

If the rules were changed, we would still expect the expression to be 
int I guess. But then, wasn't 5 an int with today's rules? With the 
proposed change, we would still be following the same rule; roughly: the 
type of the largest expression...

Such messy rules of programming languages are not easy to clean up and 
there are natural reasons why they are messy. I agree with Walter that 
the best action is to follow what other system programming languages do 
in this case.

Ali



More information about the Digitalmars-d-learn mailing list