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 exits: class Base { int foo() { return 1; } } Base func() { int m = 3; class Nested : Base { int foo() { return m; } } Base b = new Nested; assert(b.foo() == 3); // Ok, func() is still active return b; } int test() { Base b = func(); return b.foo(); // 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"
Commit pushed to https://github.com/D-Programming-Language/d-programming-language.org https://github.com/D-Programming-Language/d-programming-language.org/commit/c58bfaea9250e432ec3929bc59f0bad30f006812 fix Issue 4651 - Docs: Returned classes that have access to stack variables of its enclosing function
(In reply to comment #1) > Commit pushed to > https://github.com/D-Programming-Language/d-programming-language.org > > https://github.com/D-Programming-Language/d-programming-language.org/commit/c58bfaea9250e432ec3929bc59f0bad30f006812 > fix Issue 4651 - Docs: Returned classes that have access to stack variables of > its enclosing function Since you're on a roll (Walter) you could also $(D1) wrap the section on nested functions, Issue 4556. If not, I'll make a pull myself.
Feel free to do a pull.