Templates problem

Lodovico Giaretta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Sep 6 07:50:17 PDT 2016


On Tuesday, 6 September 2016 at 14:38:54 UTC, Russel Winder wrote:
> The code fragment:
>
> 	const results = benchmark!(run_mean, run_mode, run_stdDev)(1);
> 	const times = map!((TickDuration t) { return 
> (to!Duration(t)).total!"seconds"; })(results);
>
> seems entirely reasonable to me. However rdmd 20160627 begs to 
> differ:
>
> run_checks.d(20): Error: template 
> std.algorithm.iteration.map!(function (TickDuration t) => 
> to(t).total()).map cannot deduce function from argument types 
> !()(const(TickDuration[3])), candidates are:
> /usr/include/dmd/phobos/std/algorithm/iteration.d(450):        std.algorithm.iteration.map!(function (TickDuration t) => to(t).total()).map(Range)(Range r) if (isInputRange!(Unqual!Range))
> Failed: ["dmd", "-v", "-o-", "run_checks.d", "-I."]
>
> and I have no idea just now why it is complaining, nor what to 
> do to fix it.

 From a quick look, it looks like `results` is a 
`const(TickDuration[3])`, that is a fixed-length array. And 
fixed-length arrays aren't ranges. If you explicitly slice them, 
they become dynamic arrays, which are ranges.

So the solution is to call `map` with `results[]` instead of 
`results`.


More information about the Digitalmars-d-learn mailing list