On Sunday, 4 October 2015 at 21:57:44 UTC, Jonathan M Davis wrote:
On Sunday, October 04, 2015 16:13:47 skilion via Digitalmars-d-learn wrote:
Is this allowed by the language or it is a compiler bug ?

void main() {
    char[] a = "abc".dup;
    ubyte[] b = [1, 2, 3];
a = b; // cannot implicitly convert expression (b) of type
ubyte[] to char[]
    a ~= b;  // works
}

When appending, b to a, the elements in b are being copied onto the end of a, and presumably it works in this case, because a ubyte is implicitly convertible to char. But all it's doing is converting the individual elements. It's not converting the array.

On other hand, assigning b to a would require converting the array, and array types don't implicitly convert to one another, even if their elements do.

Honestly, I think that the fact that the character types implicitly convert to and from the integral types of the corresponding size is problematic at best and error-prone at worst, since it almost never makes sense to do something like append a ubyte to string. However, if it didn't work, then you'd have to do a lot more casting when you do math on characters, which would cause its own set of potential bugs. So, we're kind of screwed either way.

I don't think math would be a problem. There are some obvious rules that would likely just work with most existing code:

char + int = char
char - int = char
char - char = int
char + char = ERROR

Reply via email to