On 04/24/2017 04:23 PM, ag0aep6g wrote:
On 04/24/2017 08:48 PM, Stanislav Blinov wrote:
Speaking of const violation and UB, std.algorithm.mutation.move seems to
violate const without remorse:
Yup. Even in @safe code, which is a bug.
https://issues.dlang.org/show_bug.cgi?id=15315
Should fail in all situations, thanks for reporting.
The original code should work like this:
struct X {}
struct Y {
private X _x;
this()(auto ref X x)
{
static if (__traits(isRef, x))
{
_x = x;
}
else
{
import std.algorithm.mutation : move;
_x = move(x);
}
}
}
Note how I made the ctor templated so it accepts auto ref. The less
sophisticated version is simply:
struct X {}
struct Y {
private X _x;
this(ref X x)
{
_x = x;
}
this(X x)
{
import std.algorithm.mutation : move;
_x = move(x);
}
}
There should be ways to do this easier, i.e. add a forward() function to
std.algorithm.mutation. Contributions are welcome!
Andrei