On Thursday, 6 November 2014 at 10:52:32 UTC, Ivan Kazmenko wrote:
On Wednesday, 5 November 2014 at 13:34:05 UTC, Marc Schütz wrote:
On Wednesday, 5 November 2014 at 12:54:03 UTC, Ivan Kazmenko wrote:
Hi!

This gives an error (cannot deduce template function from argument types):

-----
import std.algorithm;
void main () {
        char [] c;
        sort (c);
}
-----

Why is "char []" so special that it can't be sorted?

For example, if I know the array contains only ASCII characters, sorting it sounds no different to sorting an "int []".

Hmm... this doesn't work either:

   import std.algorithm;
   import std.utf;
   void main () {
       char [] c;
       sort (c.byCodeUnit);
   }

But IMO it should.

So, you imply that to use a char array as a RandomAccessRange, I have to use byCodeUnit? (and it should work, but doesn't?)


Yes. H.S. Teoh has already submitted a PR to fix it.

Fine, but how does one learn that except by asking here? Googling did not produce meaningful results for me.

For example, isRandomAccessRange[0] states the problem:
-----
Although char[] and wchar[] (as well as their qualified versions including string and wstring) are arrays, isRandomAccessRange yields false for them because they use variable-length encodings (UTF-8 and UTF-16 respectively). These types are bidirectional ranges only.
-----
but does not offer a solution. If (when) byCodeUnit does really provide a random-access range, it would be desirable to have it linked where the problem is stated.

[0] http://dlang.org/phobos/std_range.html#.isRandomAccessRange

I agree. But how should it be implemented? We would have to modify algorithms that require an RA range to also accept char[], but then print an error message with the suggestion to use byCodeUnit. I think that's not practicable. Any better ideas?

Reply via email to