Concatenation of ubyte[] to char[] works, but assignation doesn't
Marc Schütz via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Oct 6 02:28:27 PDT 2015
On Tuesday, 6 October 2015 at 05:38:36 UTC, Jonathan M Davis
wrote:
> Your suggestion only works by assuming that the result will fit
> in a char, which doesn't fit at all with how coversions are
> currently done in D. It would allow for narrowing conversions
> which lost data. And there's no way that Walter would go for
> that (and I don't think that he should). VRP solves the problem
> insofar as it can guarantee that the result will fit in the
> target type and thus reduces the need for casting, but simply
> assuming that char + int will fit in a char just doesn't work
> unless we're going to allow narrowing conversions to lose data,
> which we aren't.
>
> If we were to allow the specific conversions that you're
> suggesting but only when VRP was used, then that could work,
> though it does make the implicit rules even screwier, becauses
> it becomes very dependent on how the int that you're trying to
> assign to a char was generated in the first place (straight
> assignment wouldn't work, but '0' - 40 would, whereas 'a' + 500
> wouldn't, etc.). VRP already makes it a bit funky as it is,
> though mostly in a straightforward manner.
I see, this is a new problem introduced by `char + int = char`.
But at least the following could be disallowed without
introducing problems:
int a = 'a';
char b = 32;
But strictly speaking, we already accept overflow (i.e. loss of
precision) for ints, so it's a bit inconsistent to disallow it
for chars.
More information about the Digitalmars-d-learn
mailing list