On Monday, 19 February 2018 at 13:51:50 UTC, Simen Kjærås wrote:
On Monday, 19 February 2018 at 13:33:34 UTC, rikki cattermole wrote:
https://dlang.org/phobos/std_experimental_checkedint.html#.Checked.min

Can't seem to get that to work, so I assumed it's not meant to be used that way:

import std.experimental.checkedint;

struct MyHook {
    enum min(T) = 3;
    enum max(T) = 15;

    static B onLowerBound(T, B)(T value, B bound)
    {
        assert(0);
    }

    static B onUpperBound(T, B)(T value, B bound)
    {
        assert(0);
    }
}

unittest
{
    Checked!(int, MyHook) a;
    a = 22;
    assert(a != 22); // This assert triggers, not the others.
}

--
  Simen

I had never used Checked and i discover that strangely there's no hook for opAssign. onLowerBound and onUpperBound works for +=, -=, *=, /=, %=, ^^=, &=, |=, ^=, <<=, >>=, and >>>=. But since init is 0, += works:

struct MyHook {
    enum min(T) = 3;
    enum max(T) = 15;

    static B onLowerBound(T, B)(T value, B bound)
    {
        assert(0);
    }

    static B onUpperBound(T, B)(T value, B bound)
    {
        assert(0);
    }
}

unittest
{
    Checked!(int, MyHook) a;
    a += 16; // triggers the onUpperBound assert
}

Reply via email to