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