assumeNoGC works but can't get an assumePure to work

aliak something at something.com
Mon Sep 3 22:07:10 UTC 2018


In another thread [0] this function can be used to call non nogc 
code from nogc code

import std.traits;

auto assumeNoGC(T)(T t) {
     enum attrs = functionAttributes!T | FunctionAttribute.nogc;
     return cast(SetFunctionAttributes!(T, functionLinkage!T, 
attrs)) t;
}

And then you can use it like:

@nogc unittest {
   auto allocate() {
     return [1];
   }
   assumeNoGC({allocate;})();
}

So I tried to the same with pure, wrote assumePure and changed 
the attribute to FunctionAttribute.pure_, but that doesn't seem 
to be treated the same:

pure unittest {
   static int thing = 3;
   void modify() {
     thing = 4;
   }
   assumePure({modify;})();
}

Ye get: pure function modify cannot access mutable static data 
thing

Why does it work with nogc but not with pure?

Cheers,
- Ali

[0]: 
https://forum.dlang.org/thread/awalwokejtywzkxgdqyg@forum.dlang.org


More information about the Digitalmars-d-learn mailing list