On Wednesday, 16 October 2013 at 19:49:25 UTC, monarch_dodra wrote:
On Wednesday, 16 October 2013 at 17:50:48 UTC, Daniel Davidson wrote:
How do you propose to make a mutable copy *generically*?

You can't. Let alone generically.

If I give you an "immutable int* p", how do you copy it to "int* p" ?

On Wednesday, 16 October 2013 at 18:11:48 UTC, Daniel Davidson wrote:
Thanks. It is cute - but not so helpful. The example stands. I *need* to call a createRFromT.

Their shapes are the same in this simple example because I simplified. Make R look like:

struct R {
 string[string] ss;
 int[] j;
}

and the cute trick falls apart. In words, I have an R and I want to make a T. The R is const the T will be immutable because the ctor requires it. But it is technically not immutable until it is initialized.

The problem is that you are taking a const(R). And you can't assign a const to an immutable. It has nothing to do with initialization.

Just to clarify: in the code below: createRFromT(t, r) is *not* meant to imply it will just try an assignment. Rather, it reads from t and builds its own data for R. The problem is with initialization - see Simen Kjaeraas response here: http://forum.dlang.org/post/[email protected]

struct S {
  R r;
  this(ref const(T) t) immutable {
    createRFromT(t, r);
  }
}

void createRFromT(ref const(T) t, ref R r) {
  //...
}

Reply via email to