On 6/3/16 2:55 PM, ag0aep6g wrote:
On 06/03/2016 08:36 PM, Steven Schveighoffer wrote:
but a direct cast
of the bits from char does NOT mean the same thing as a dchar.

That gives me an idea. A bitwise reinterpretation of int to float is
nonsensical, too. Yet int implicitly converts to float and (for small
values) preserves the meaning. I mean, implicit conversion doesn't have
to mean bitwise reinterpretation.

I'm pretty sure the CPU handles this, though.

How about replacing non-standalone code units with replacement character
(U+FFFD) in implicit widening conversions?

For example:

----
char c = "รถ"[0];
wchar w = c;
assert(w == '\uFFFD');
----

Would probably just be band-aid, though.

Except many chars *do* properly convert. This should work:

char c = 'a';
dchar d = c;
assert(d == 'a');

As I mentioned in my earlier reply, some kind of "bounds checking" for the conversion could be a possibility.

Hm... an interesting possiblity:

dchar _dchar_convert(char c)
{
   return cast(int)cast(byte)c; // get sign extension for non-ASCII
}

-Steve

Reply via email to