On 2/28/2013 3:07 PM, Timon Gehr wrote:
On 03/01/2013 12:01 AM, Walter Bright wrote:
On 2/28/2013 11:03 AM, Timon Gehr wrote:
It's really easy. DMD can be convinced to do a sufficient[ly] conservative
analysis
even now, but the behaviour is undocumented and seems unintentional.


     void main() {
         void foo()() { bar(); }
         void bar()() { i = 3; }
         int i;
         foo();
     }

No, the compiler is not being clever here,

I wasn't stating that.

nor is this undocumented.

Where is it documented?

Under templates, it says that templates are instantiated in the scope of the corresponding template declaration.

At the time of foo(); bar has been added to the scope.


Obviously. In the above code all templates are instantiated. This is about which
state of the function local symbol table is used.

C++ has the notion of point of instantiation and point of definition, with D, it's about scope of instantiation and scope of definition instead.

Reply via email to