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