On 11/04/2015 12:11 AM, Namal wrote:

>> import core.checkedint;
>>
>> void main() {
>>     bool overflowed;
>>     auto result = adds(int.max, 1, overflowed); // this overflows
>>     adds(1, 2, overflowed);     // this does not reset the flag
>>
>>     assert(overflowed);
>> }
>>
>> Ali
>
> wow, this I don't understand at all, how do those two operations
> connected to each other? By the bool value?

The 'overflow' parameter is a 'ref' parameter, meaning that these functions modify the actual 'overflowed' variable above. You can imagine that they do not set it to 'false' ever:

Imagine that adds() is implemented like the following:

pure nothrow @nogc @safe
int adds(int x, int y, ref bool overflow) {
    // ...
    if (over_flow_detected) {
        overflow = true;
    }
}

So, the caller's variable can only go from 'false' to 'true', never the other way around. (All of this is just a guess. :) )

Ali

Reply via email to