Nested functions should be exempt from sequential visibility rules
Don Clugston
dac at nospam.com
Wed Apr 4 00:57:57 PDT 2012
On 03/04/12 07:38, Nick Sabalausky wrote:
> Regarding this:
>
> http://d.puremagic.com/issues/show_bug.cgi?id=790
>
> I submit that nested functions should be exempt from the usual sequential
> visibility rules. (Therefore, mutually recursive nested functions would
> become possible.)
>
> Or at the very *least*, this horrific C-like workaround should be possible:
>
> void foo()
> {
> void b();
> void a() {...};
> void b() {...};
> }
>
> ...Flame away! ;)
>
>
The most flexible method is to declare a local, nested struct. Any
member functions (and variables!) of that struct have non-sequential
semantics, so they can forward reference each other just fine.
void foo()
{
struct Local
{
static void a() { b(); }
static void b() { };
}
Local.a();
}
If they need to access stack variables, you'll need to create an actual
instance of the struct. You can make it a static struct if they don't
need access to any stack variables of foo.
Note that this completely sidesteps all the nasty issues I mentioned in
other posts.
More information about the Digitalmars-d
mailing list