Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | 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
|
Copyright © 1999-2021 by the D Language Foundation