Error using `equal` with various string types

Jonathan M Davis jmdavisProg at gmx.com
Sat Feb 23 20:47:28 PST 2013


On Sunday, February 24, 2013 05:18:18 Andrej Mitrovic wrote:
> On 2/24/13, Jonathan M Davis <jmdavisProg at gmx.com> wrote:
> > strings and dstrings aren't comparable.
> 
> Why aren't they? They're just different encodings of UTF, I'd expect
> Phobos to support comparing UTF8/UTF16/UTF32 against each other.

Because the compiler doesn't general deal on the level of code points. It 
deals with code units, and it doesn't generally treat strings as being special 
at all. So, you can't compare string and dstring any more than you can compare 
ubye[] and uint[]. Pretty much the only place in the language where you get 
automatic decoding is when you ask for it with a foreach loop by making the 
iteration type dchar. All the rest of it is Phobos, and equals is specifically 
the way to compare strings by code point. It just isn't recursive, which is 
why your'e having trouble.

However, now that I think about it, equal takes a predicate, so it would 
probably work to do something like

equal!"equal(a, b)"(["hello"d], ["hello"]);

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list