Soviet Friend píše v Út 19. 01. 2016 v 22:12 +0000: > I just attempted to add one ubyte to another and store the result > in a ubyte but apparently ubytes get converted to ints when being > added... and converting what becomes an int becomes impossible to > store in a ubyte without an explicit cast... > > ubyte a, b; > ubyte c = a + b; // Error: cannot implicitly convert expression > (cast(int)a + cast(int)b) of type int to ubyte >
Problem is that compiler does not know that a + b would fit in ubyte. For example if a would be 200 and b would be 100 it would not fit in ubyte. But if compiler can verify it will fit it makes cast implicit. immutable ubyte a = 0; ubyte b = 0; ubyte c = a + b; or ubyte a = 0; ubyte c = a + 0; or immutable ubyte a = 1; immutable ubyte b = 5; ubyte c = a + b; works ok but immutable ubyte a = 1; ubyte b = 0; ubyte c = a + b; can't works because b could be 255 and 255 + 1 does not fit to ubyte > On principal I'm not casting to fix this. I don't care if my > computer needs to do math on a 4 byte basis, I'm not writing > assembly. I'm really hoping this is a bug because trying to use > any type other than ints is going to make for some really ugly > code otherwise... > > Can I prevent the initial implicit casts? > > > On the topic of complaining about casting... array lengths as > ulongs is painful... any chance of an array[].lengthi being a > thing? array.length is not ulong is it size_t and I do not see any problem with that, can you be more specific.