Is this a known bug or deliberate limitation? void func(T)(T data) { void subfunc1() { process(data); if (recurse) subfunc2(); // Error: subfunc2 undefined } void subfunc2() { process(data); if (recurse) subfunc1(); // Error: subfunc1 undefined } subfunc1(); } T -- Heads I win, tails you lose.