On Sunday, March 03, 2013 15:39:38 Peter Sommerfeld wrote: > According to http://dlang.org/ctod.html foreward declarations > are not needed because functions can be defined in any order. > But that seems not to be true for inner functions. A somewhat > artificial example: > ----------------------------- > import std.stdio; > > void main(string[] args){ > int count; > > // void foo() -- unlike in C in D not possible > > void bar(){ > ++count; > writeln("bar"); > > foo(); // ERROR: undefined identifier foo > } > > void foo(){ > writeln("foo"); > if(count){ > writeln("foo again"); > return; > } > > bar(); > } > > foo(); > } > --------------------------------------- > > Is there a workaround for such a situation or do I have > to put everything outside the enclosing function.
AFAIK, you have to put them outside for this. The order of both function calls and import declarations matters inside of a function even though it doesn't matter outside. In general, nested functions are more limited (e.g. if they're templated, you can't instantiate them with different arguments - you only get one instantation). - Jonathan M Davis
