Calling dynamically bound functions from weakly pure function

Rene Zwanenburg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jul 22 06:35:25 PDT 2014


On Saturday, 19 July 2014 at 11:12:00 UTC, Marc Schütz wrote:
> Casting to pure would break purity if the called function is 
> not actually pure. AFAIU, the problem is that the mutable 
> function pointers are not accessible from inside the pure 
> function at all, in which case the solution is to cast them to 
> immutable, not to pure.

Indeed that is the problem. I didn't think of casting to 
immutable, that should work..

>
> But to cast something, you'd need to have access to it in the 
> first place...
>
> This seems to work:
>
>     int function(int) pure my_func_ptr;
>
>     struct CallImmutable {
>         static opDispatch(string fn, Args...)(Args args) {
>             return mixin(fn)(args);
>         }
>     }
>
>     int test() pure {
>         return CallImmutable.my_func_ptr(1);
>     }
>
> But I suspect it's because of a bug. `CallImmutable.opDispatch` 
> should not be deduced to be pure, and this not be callable from 
> `test`.

Yeah that looks like a bug. I should be able to conjure something 
up, perhaps using assumeUnique, that won't break in newer 
versions.

Thanks for the answers!


More information about the Digitalmars-d-learn mailing list