On 4/29/2013 3:58 AM, monarch_dodra wrote:
Is there *any* way to make a call to a non-pure function in a pure context, if
you know you won't violate your own purity?

Vee haf veys:

1. put "debug" before the impure code (but you'll have to compile with -debug)

2. put the impure code in a separate function, take its address, and cast its address to being a pointer to a pure function. (Of course, such a cast should be rejected by @safe code.)

3. Put the code in an extern(C) function, compiled separately as impure, but declared as pure in the client. C functions don't get name mangling, so the compiler won't know it's impure.


I feel it's a good thing that you'll need to jump through some hoops to do this, otherwise 'pure' would not be very useful.



Related question:
Can a function that "sometimes throws" be considered as pure?

deadalnix's answer is correct.

Reply via email to