https://issues.dlang.org/show_bug.cgi?id=16341
ag0ae...@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |ag0ae...@gmail.com Resolution|--- |INVALID --- Comment #1 from ag0ae...@gmail.com --- I think this is due to D allowing floating points operations to be done at a higher precision than is stated in the source. That is, `fun` may do its calculations with doubles or reals, and it may return a double or real in a register. The same applies to `working` and `failing`, but `working` puts the results from `fun` on the stack first, forcing a conversion to float, while `failing` returns directly, so the operands are not converted to float. Note that the assert passes when you compile with -O, because then `working` is optimized to behave like `failing`. Closing as INVALID. Feel free to reopen if you disagree. --