Strings iteration and immutable
bearophile via Digitalmars-d
digitalmars-d at puremagic.com
Sun Sep 21 04:24:19 PDT 2014
This comes from a discussion in this issue:
https://issues.dlang.org/show_bug.cgi?id=13122
Perhaps this topic was already discussed and solved in past, but
unfortunately I don't remember such discussions.
Issue 13122 is about cartesianProduct but the same situation is
visible more simply with std.algorithm.filter:
void main() {
import std.algorithm: filter;
immutable a = "ABC";
foreach (t1; a.filter!(x => true))
pragma(msg, typeof(t1));
immutable b = "ABC"d;
foreach (t2; b.filter!(x => true))
pragma(msg, typeof(t2));
}
Output:
dchar
immutable(dchar)
So cartesianProduct seems to be working like the other Phobos
functions and I'll have to close Issue 13122 as worksforme.
a.filter yields dchar because range iteration converts ranges of
chars to ranges of dchars. But then why isn't the output like
this?
immutable(dchar)
immutable(dchar)
The string a is composed of immutable(char) after all.
For me it's strange that iterating on arrays of immutable chars
or immutable dchars gives an output of different "constness".
This looks like a gratuitous breakage of symmetry :-)
Bye,
bearophile
More information about the Digitalmars-d
mailing list