On Tuesday, 12 December 2023 at 14:57:48 UTC, Kevin Bailey wrote:
perm.d:8:26: error: none of the overloads of template ‘std.algorithm.iteration.permutations’ are callable using argument types ‘!()(char[])’
    8 |         foreach (perm; as.permutations)
      |                          ^
/usr/lib/gcc/x86_64-linux-gnu/13/include/d/std/algorithm/iteration.d:7919:20: 
note: Candidate is: ‘permutations(Range)(Range r)’
     with `Range = char[]`
  must satisfy the following constraint:
`       isRandomAccessRange!Range`
 7919 | Permutations!Range permutations(Range)(Range r)
      |                    ^

Because of autodecoding [1], slices of char and wchar are treated by Phobos as bidirectional ranges of dchar. (They are not random-access ranges because UTF-8 and UTF-16 are variable-length encodings.)

To work around this, use std.utf.byChar:

    import std.utf: byChar;
    foreach (perm; as.byChar.permutations)
        writeln(perm);

[1] http://ddili.org/ders/d.en/ranges.html#ix_ranges.decoding,%20automatic

Reply via email to