View mode: basic / threaded / horizontal-split · Log in · Help
December 12, 2012
Forward reference not working in nested functions
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.
December 12, 2012
Re: Forward reference not working in nested functions
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
December 12, 2012
Re: Forward reference not working in nested functions
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.
December 12, 2012
Re: Forward reference not working in nested functions
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();
    }
)
December 12, 2012
Re: Forward reference not working in nested functions
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
Top | Discussion index | About this forum | D home