Can't modify this

H. S. Teoh via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jun 30 09:29:01 PDT 2014


On Sat, Jun 28, 2014 at 06:39:33PM -0300, Ary Borenszweig via Digitalmars-d-learn 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.
> 
> This is not a big issue (more a curiosity). I just wanted to know what
> is the correct way to do in this case.

That depends on what you're trying to do. Why do you need to assign to
this?


T

-- 
Three out of two people have difficulties with fractions. -- Dirk Eddelbuettel


More information about the Digitalmars-d-learn mailing list