On Saturday, 22 February 2014 at 14:03:11 UTC, Philippe Sigaud wrote:
Now what remains is to retstrict create to only take a fun with *no*
input arguments and a non-void return.

How do I do that?

With a template contraint.
Not tested:

import std.traits: isCallable, ParameterTypeTuple, ReturnType;

auto create(alias fun)(size_t n)
if (isCallable!fun && ParameterTypeTuple!(fun).length == 0
&& !is(ReturnType!fun == void))
{
    import std.range: iota, map;
    return n.iota.map!(n => fun);
}

Your solution with

   ParameterTypeTuple!(fun).length == 0

doesn't work here because currTime takes a defaulted argument.

I believe we need a new std.trait, say arityMin, for this.
Any ideas on how to implement that? Perhaps using __traits(compiles...?

See also my update at:
https://stackoverflow.com/questions/21954381/range-construction-pattern/21954416?noredirect=1#21954416

Reply via email to