Can't use std.algorithm.remove on a char[]?

TheGag96 via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun May 1 16:51:54 PDT 2016


On Sunday, 1 May 2016 at 09:11:22 UTC, ag0aep6g wrote:
> It's because of auto-decoding. char[] is an array of chars, but 
> it's been made a range of dchars. Calling front on a char[] 
> decodes up to four chars into one dchar.
>
> Obviously you can't take the address of the dchar, because it's 
> just a return value.
>
> You can't assign through front, because the number of chars 
> could be different from what's currently there. The whole array 
> would have to be re-arranged then, which would be unexpectedly 
> costly for the user.
>
> The auto-decoding behavior was chosen to make dealing with 
> char[] less bug-prone. With auto-decoding you don't have to 
> worry about cutting a multibyte sequence in half (can still cut 
> a grapheme cluster in half, though). However, as you see, it 
> creates other headaches, and it's considered a mistake by many. 
> Getting rid of it now would be a major breaking change. Could 
> be worthwhile, though.

That's a shame. I'd really like to be able to remove a character 
from a character array... I supplier I just have to get used to 
casting to ubyte[] or maybe just using dchar[] instead. I'm 
honestly surprised I haven't encountered this behavior sooner.

It's interesting - as I keep coding in D and learning about how 
amazing it is to use, I always find these weird quirks here and 
there to remind me that it isn't flawless... I guess it can't be 
perfect, haha.




More information about the Digitalmars-d-learn mailing list