digitalmars.D.learn - zip.map.reduce at CT?
- bearophile (34/34) Oct 02 2012 Do you know if here the problem is in Phobos or if I'm asking
Do you know if here the problem is in Phobos or if I'm asking Phobos to do something too much hard? import std.algorithm: map, reduce; import std.range: zip; struct S {} alias bool function(S) F; F foo(T)(T) { return p => true; } F bar(F r1, F r2) { return p => true; } F spam(S[] ps) { return zip(ps, ps).map!foo().reduce!bar(); } const r1 = spam([S(), S()]); // Error void main() { const r2 = spam([S(), S()]); // OK } Output: ...\dmd2\src\phobos\std\conv.d(3393): Error: cannot dereference invalid pointer *result ...\dmd2\src\phobos\std\range.d(3714): called from here: emplace(addr,front(this.ranges._field_field_0)) ...\dmd2\src\phobos\std\algorithm.d(428): called from here: this._input.front() ...\dmd2\src\phobos\std\algorithm.d(428): called from here: foo(this._input.front()) ...\dmd2\src\phobos\std\algorithm.d(697): called from here: _param_0.front() test.d(12): called from here: reduce(map(zip(ps,ps))) test.d(14): called from here: spam([S(),S()]) Bye, bearophile
Oct 02 2012