problem with std.range.choose()
Johannes Loher via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Feb 16 17:35:34 PST 2016
Hello, I have a problem with using std.range.choose():
When using std.range.choose() on a range R, for which
hasElaborateCopyConstructor!R is true, then a postblit for the
result of std.range.choose() is created, which includes a call to
R.__postblit(). However, hasElaborateCopyConstructor!R may be
true, even if R does not define this(this), for example in the
case that one of the members of R does so.
The example that I encountered (reduced to a minimum) was the the
following:
import std.stdio : stdin;
import std.range: choose;
void main()
{
ubyte[1][] secondRange;
choose(true, stdin.byChunk(1), secondRange);
}
In this case File defines this(this), but ByChunk does not, so
the above code does not compile.
I think what std.range.choose() does here is completely
unnecessary: When the result of std.range.choose() gets copied,
the underyling range gets copied, and if it implements postblit,
it is automatically called. No need to call it explicitly, right?.
More information about the Digitalmars-d-learn
mailing list