On 4/26/17 8:17 PM, Stanislav Blinov wrote:
On Wednesday, 26 April 2017 at 13:38:59 UTC, Steven Schveighoffer wrote:

If you want to duplicate const data, but just shallow-copy mutable
data, you are correct in that you need two separate constructors, and
inout doesn't come into play.

That's the thing, this is more about "need" than "want". As far as I
understood, Manu is talking about these ctors from the C++ perspective,
where the copy constructor takes const&.
And the problem for those who come from C++ would be that in D it
doesn't work that way, at least not universally.

My solution would be to push the duplication onto the user. I'm not a fan of implicit copying. It's also wasteful in the case of immutable data.

struct X
{
   char[] x;
   X dup() const { return X(x.dup); }
}

struct Y
{
   X x;
   inout this(inout(X) x) { this.x = x; }
}

X x;
const(X) cx;
auto y = Y(x);
auto cy = const(Y)(cx); // this could be simplified with factory
y = Y(cx.dup);

-Steve

Reply via email to