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