Forwarding Uncopyable Static Array Elements

Nordlöw per.nordlow at gmail.com
Sun Sep 17 14:42:07 UTC 2017


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?


More information about the Digitalmars-d-learn mailing list