On 3/1/2015 12:51 PM, Michel Fortin wrote:
That's actually not enough. You'll have to block access to global variables too:

     S s;

     void main() {
         s.array = RCArray!T([T()]);   // s.array's refcount is now 1
         foo(s.array[0]);           // pass by ref
     }
     void foo(ref T t) {
         s.array = RCArray!T([]);      // drop the old s.array
         t.doSomething();              // oops, t is gone
     }

Thinking about it, there are many other ways this can happen. At the moment, I'm stuck thinking of a solution other than requiring foo() to be pure. Anyone have ideas?

Reply via email to