digitalmars.D.bugs - [Issue 15134] New: std.parallelism taskPool.amap fails to compile
- via Digitalmars-d-bugs (61/61) Oct 01 2015 https://issues.dlang.org/show_bug.cgi?id=15134
https://issues.dlang.org/show_bug.cgi?id=15134 Issue ID: 15134 Summary: std.parallelism taskPool.amap fails to compile with array of structs or Tuples with named members Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: blocker Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: jayn prismnet.com This code result in the compile error. Commenting out the taskPool.amap line builds ok. Similar error for Tuples with named members substituted for the struct definitions of TR, TI, TO. Some analysis was done by Ali Cehreli in this thread, which also has the Tuple implementation: http://forum.dlang.org/post/mujsqv$tlk$1 digitalmars.com import std.algorithm, std.parallelism, std.range; import std.typecons; import std.meta; import std.stdio; // define some input measurement sample tuples and output metric tuples struct TR { long raw;} struct TI {long L1I_MISS; long L1D_MISS; } struct TO { TR L1_MISS; } // various metric definitions // using Tuples with defined names for each member, and use the names here in the metrics. TR met_l1_miss ( ref TI m){ TR rv; rv.raw = m.L1I_MISS+m.L1D_MISS; return rv; } // a convenience to use all the metrics above as a list alias Metrics = AliasSeq!(met_l1_miss); void main(string[] argv) { auto samples = iota(100); auto meas = new TI[samples.length]; auto results = new TO[samples.length]; // Initialize some values for the measured samples foreach(i, ref m; meas){ m.L1D_MISS= 100+i; m.L1I_MISS=100-i; } ref TI getTerm(int i) { return meas[i]; } // compute the metric results for the above measured sample values in parallel taskPool.amap!(Metrics)(std.algorithm.map!getTerm(samples),results); TR rv1 = met_l1_miss( meas[1]); writeln("measurements:", meas[1]); writeln("rv1:", rv1); writeln("results:", results[1]); } Severity Code Description Project File Line Error Error: static assert "Wrong buffer type." C:\D\dmd2\src\phobos\std\parallelism.d 1668 Error instantiated from here: amap!(MapResult!(getTerm, Result), TO[]) d:\visd\dmapbug\dmapbug\main.d 35 --
Oct 01 2015