Nested functions should be exempt from sequential visibility rules
Timon Gehr
timon.gehr at gmx.ch
Tue Apr 3 05:12:51 PDT 2012
On 04/03/2012 02:00 PM, Nick Sabalausky wrote:
> "Timon Gehr"<timon.gehr at gmx.ch> wrote in message
> news:jlej27$mvi$1 at digitalmars.com...
>>
>> This is the right way to work around this issue. It works now and does not
>> imply any kind of overhead at runtime:
>>
>> void foo(){
>> void a()(){ ... }
>> void b() { ... }
>> }
>>
>
> That's a very simple workaround (albiet unintuitive - unless I'm just too
> tired right now). It leads me to two questions:
>
> 1. How the heck does that work?
>
Symbol lookup is done upon the first instantiation of the local template.
> 2. What, if any, problems would arise from just automatically doing that
> behind-the-scenes? Ie, to just automatically turn all non-templated nested
> functions into no-parameter templated nested functions? Would that be a
> feasable solution?
>
>
Your proposal is basically to allow a local function to forward
reference any symbol that is declared before the local function is first
referenced.
This still has the following problem:
void a(){/*cannot reference c*/}
void b(){/*because this references a*/}
void c(){/*references a and b*/ }
It would work by reordering the code like so:
void b(){/*references a*/}
void a(){/*references c*/}
void c(){/*references a and c*/}
That would be extremely unintuitive.
More information about the Digitalmars-d
mailing list