Thread overview |
---|
September 17, 2017 Forwarding Uncopyable Static Array Elements | ||||
---|---|---|---|---|
| ||||
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? |
September 17, 2017 Re: Forwarding Uncopyable Static Array Elements | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | 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.
|
September 17, 2017 Re: Forwarding Uncopyable Static Array Elements | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | 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?
|
Copyright © 1999-2021 by the D Language Foundation