On Saturday, 28 June 2014 at 21:39:35 UTC, Ary Borenszweig wrote:
On 6/28/14, 6:21 PM, H. S. Teoh via Digitalmars-d-learn wrote:
On Sat, Jun 28, 2014 at 05:40:19PM -0300, Ary Borenszweig via Digitalmars-d-learn wrote:
This doesn't work:

class Foo {
  this() {
    this = new Foo;
  }
}

Error: Cannot modify 'this'

However you can do this:

class Foo {
  this() {
    auto p = &this;
    *p = new Foo();
  }
}

It even changes the value of this!

Should that compile? I mean, it's the same as modifying 'this'...

I'd say, file an enhancement request on the bug tracker.

However, there comes a point, where given enough indirections, it would be infeasible for the compiler to figure out exactly where everything points, and so you'll be able to circumvent the compiler check somehow. If you're out to thwart the compiler, then eventually you will succeed,
but it begs the question, why?


T

I think that if you disallow taking the address of `this`, then the problem is solved.

IMO it shouldn't be treated differently from other parameters - that's what `this` is, after all.

Reply via email to