On Wednesday, 19 October 2016 at 18:56:35 UTC, Meta wrote:
Couldn't you do this? Mind you I'm not able to test the code right now, but I think it can work with some tweaking.

typeof(fn(E.init))[n] map1(alias fn, E, size_t n)(E[n] container)
{
    import std.algorithm.iteration : map;
    import std.array : array;

    typeof(return) sres;
    return container[].map!fn.copy(sres[]);
}

@safe pure nothrow unittest
{
   int[42] c;
   //result should be a static array of length 42
   auto result = map1!(_ => _^2)(c);
}

Sorry, that code had a few mistakes. The working code:

import std.algorithm;
import std.range;

typeof(fn(E.init))[n] map1(alias fn, E, size_t n)(E[n] container)
{
    import std.algorithm.iteration : map;
    import std.array : array;

    typeof(return) sres;
    container[].map!fn.copy(sres[]);
    return sres;
}

void main()
{
   int[42] c;
   //result should be a static array of length 42
   auto result = map1!(_ => _^2)(c);
   assert(is(typeof(result) == typeof(c)));
}

https://goo.gl/t9m3YK

I'm actually pretty impressed that this kind of code can be written in D.

Reply via email to