On 12/14/2013 06:39 PM, H. S. Teoh wrote:
I still do that even in D programs, because DMD's handling of forward references is, shall we say, quirky? It works most of the time, but sometimes you get odd errors because certain symbol resolution algorithms used by dmd will produce unexpected results if you don't declare certain symbols beforehand. So it's not completely order-free, but also not completely order-dependent, but something nebulous in between. Me, I play it safe and just write things the C way, so that I never run into these kinds of issues.
I couldn't resist the temptation and hence I'm still stuck with 2.060. (And the code base contains quite a few hackarounds to make it compile even with 2.060.) It seems really hard to minimize a reproducible test case. Maybe I should just upload the code to github and file a regression report. (But such a bug report does not really address the underlying problem, which is that the spec is ambiguous about this as well. Most bugs related to this get fixed quickly, but the fixes introduce breakage at other points.)