Summary: Docs: Returned classes that have access to stack
                    variables of its enclosing function
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2

--- Comment #0 from Andrej Mitrovic <> 2010-08-15 
19:23:25 PDT ---
This is an outdated statement:

"While a non-static nested class can access the stack variables of its
enclosing function, that access becomes invalid once the enclosing function

class Base
    int foo() { return 1; }

Base func()
{   int m = 3;

    class Nested : Base
    int foo() { return m; }

    Base b = new Nested;

    assert( == 3);    // Ok, func() is still active
    return b;

int test()
    Base b = func();
    return;        // Error, func().m is undefined

As is stated in TDPL, variables in the local function get allocated on the heap
if DMD detects that a returning class needs access to it. This section needs to
be updated.

The next section with the code example for a workaround can be removed:

"If this kind of functionality is needed, the way to make it work is to make
copies of the needed variables within the nested class's constructor"

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to