Re: Forwarding Uncopyable Static Array Elements

2017-09-17 Thread Nordlöw via Digitalmars-d-learn

On Sunday, 17 September 2017 at 13:00:04 UTC, Nordlöw wrote:

How can

T[n] asStatic(T, size_t n)(T[n] arr)
{
import std.traits : isCopyable;
static if (isCopyable!T)
{
return arr;
}
else
{
static assert(false, "TODO support forwarding of 
uncopyable elements");

}
}

be extended to support uncopyable element types?


This works for me

T[n] asStatic(T, size_t n)(T[n] x)
{
import std.traits : isCopyable;
static if (isCopyable!T)
{
return x;
}
else
{
T[n] y = void;

// TODO why doesn't this work here?
// import std.algorithm.mutation : moveEmplaceAll;
// moveEmplaceAll(x[], y[]);

foreach (const ix, ref value; x)
{
import std.algorithm.mutation : move;
move(value, y[ix]);
}

return y;
}
}

Why does `moveEmplaceAll` error here?


Forwarding Uncopyable Static Array Elements

2017-09-17 Thread Nordlöw via Digitalmars-d-learn

How can

T[n] asStatic(T, size_t n)(T[n] arr)
{
import std.traits : isCopyable;
static if (isCopyable!T)
{
return arr;
}
else
{
static assert(false, "TODO support forwarding of 
uncopyable elements");

}
}

be extended to support uncopyable element types?


Re: Forwarding Uncopyable Static Array Elements

2017-09-17 Thread Nordlöw via Digitalmars-d-learn

On Sunday, 17 September 2017 at 13:00:04 UTC, Nordlöw wrote:

How can

...

be extended to support uncopyable element types?


That is, when `T` is uncopyable.