On 05/19/2014 09:03 PM, Dicebot wrote:

immutable(Object*) alloc() pure
{
     return new Object();
}

bool oops() pure
{
     auto a = alloc();
     auto b = alloc();
     return a is b;
}

This is a snippet that will always return `true` if memoization is at
work and `false` if strongly pure function will get actually called
twice. If changing result of your program because of silently enabled
compiler optimization does not indicate a broken compiler I don't know
what does.

Furthermore, it may not at all be obvious that this is happening: After all, purity can be inferred for template-heavy code, and comparing addresses will not prevent purity inference.

Reply via email to