Can't modify this

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jun 30 09:39:57 PDT 2014


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.


More information about the Digitalmars-d-learn mailing list