digitalmars.D - Forward reference not working in nested functions
- "H. S. Teoh" <hsteoh quickfur.ath.cx> Dec 12 2012
- Jacob Carlborg <doob me.com> Dec 12 2012
- Timon Gehr <timon.gehr gmx.ch> Dec 12 2012
- Timon Gehr <timon.gehr gmx.ch> Dec 12 2012
- "bearophile" <bearophileHUGS lycos.com> Dec 12 2012
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.
Dec 12 2012
On 2012-12-12 19:03, H. S. Teoh wrote: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(); }
It's basically the same thing as you need to declare variables in correct order in a function. -- /Jacob Carlborg
Dec 12 2012
On 12/12/2012 07:03 PM, H. S. Teoh wrote: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
Both.
Dec 12 2012
On 12/12/2012 09:03 PM, Timon Gehr wrote:On 12/12/2012 07:03 PM, H. S. Teoh wrote: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
Both.
(A silly workaround is the following, but I do not know if this has been documented since it has been discovered: void func(T)(T data) { void subfunc1()() { process(data); if (recurse) subfunc2(); // Ok. } void subfunc2() { process(data); if (recurse) subfunc1(); // Ok. } subfunc1(); } )
Dec 12 2012
Timon Gehr:(A silly workaround is the following, but I do not know if this has been documented since it has been discovered:
The workaround I use was found by Don, is to the define an inner static struct with static methods. Bye, bearophile
Dec 12 2012









Jacob Carlborg <doob me.com> 