[Issue 4256] Inner template mathods can't access this pointer

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Sep 16 08:48:30 PDT 2011


http://d.puremagic.com/issues/show_bug.cgi?id=4256


Simen Kjaeraas <simen.kjaras at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code


--- Comment #1 from Simen Kjaeraas <simen.kjaras at gmail.com> 2011-09-16 08:48:05 PDT ---
This bug has grown worse. A lot worse. Good news: this now compiles:

struct foo {
    int n;
    void baz( ) {
        void qux(T)() {
            n = 3;
            assert(n == 3); // Passes
        }
        qux!int();
    }
}

void main( ) {
    foo b;
    assert(b.n == 0); // Passes
    b.baz();
    assert(b.n == 3); // Fails
}

As we can see, the change in n is not properly propagated. What's even worse,
is this:

struct foo {
    int n;
    void baz( ) {
        void qux(T)(void* a) { // Added parameter
            n = 3;
            assert(n == 3); // Passes
            assert(a == &this); // Added.
        }
        qux!int(&this);
    }
}

void main( ) {
    foo b;
    assert(b.n == 0); // Passes
    b.baz();
    assert(b.n == 3); // No longer fails.
}

You can then remove the assert on line 7 (a == &this) to get the old behavior
back, the additional parameter changes nothing on its own.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list