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