January 29, 2007Re: Issues with constants, and inout (was Real World usage of D, Today)
Posted in reply to Oskar Linde
Oskar Linde wrote: > Frits van Bommel wrote: >> It's a bit more complicated with character literals than just >> defaulting to 'char': > [snip typeof('e') == char, typeof('é') == wchar, ...]] >> So it defaults to the *smallest* character type that can hold it in >> one element. >> Pretty cool, actually. > > A problem related to this, that might actually warrant a bug report, is > that given: > > char str = "abcd"; > > str ~= 'e'; > writefln(str); > > Is OK, while > > str ~= 'é'; > writefln(str); > > Generates an invalid UTF-8 string ant gives the runtime "Error: 4invalid > UTF-8 sequence" > > It seems like the wchar 'é' gets int-promoted to 0xE9 that is different > from the char (utf-8) representation of "é", that would be x"C3 A9". Yes, that probably warrants a bug report. Either an error should be produced (something like "Invalid operation: str ~= 'é', cannot concatenate wchar to char"), or (preferably) it should just work. The latter can (for example) be implemented by doing the equivalent of std.utf.encode(str, 'é'), or the equivalent of str ~= "é" (note the quotes, implicitly converting it to char instead of wchar).