On Thursday, 12 January 2017 at 00:30:33 UTC, Ignacious wrote:
On Wednesday, 11 January 2017 at 19:23:10 UTC, Razvan Nitu wrote:
[...]


If you change the return type to a void* your code basically works.


void* makeMultidimensionalArray(T, Allocator)(auto ref Allocator alloc, size_t[] lengths)
{
    if (lengths.length == 1)
    {
                int x = 0x01FEEF01;
        return cast(void*)makeArray!T(alloc, lengths[0], x);
    }
    else
    {
alias E = typeof(makeMultidimensionalArray!T(alloc, lengths[1..$]));

        auto ret = makeArray!E(alloc, lengths[0]);
        foreach (ref e; ret)
e = makeMultidimensionalArray!T(alloc, lengths[1..$]);
        return cast(void*)ret;
    }
}

The problem is that then you need to cast back and that essentially results in the original problem. Can be done but probably gonna have to use string mixins.

That isn't a solution and will probably introduce other bugs.

As soon as you have to result to using void* is an indication of bad design IMO, because it leads to very unsafe possibilities.

Reply via email to