On Saturday, 25 June 2016 at 14:38:43 UTC, Robert burner Schadek wrote:
I think there is a major problem with the proposed design.

when Checked!(int, void) is to behave as an int, why do we need it in the first place. I mean we have int as a basic type. Can't we do:

alias Int = int;
alias Int = Checked!(int, SomeUsefulHook);

On second thought, the only feature of Checked!(int, void) is to be a slower int ;-)

IMO the default CheckedInt!(int, void) needs a NaN like init/failure state. After any operation that overflows the value should be NaN.

IMO this is the same problem as for the test function with no arguments. What if your policy does nothing ? This is the end case, and while probably not very useful on its own, is very important to not push a ton of complexity on user code.

Just like multiplying by 0 or 1 is not very useful, yet the MUL instruction and * operator accept these as operands. Like adding 0 is not useful, yet ADD and the + operator accept these as operand.

It is important for library code to handle degenerate cases gracefully.

Also I'd run the code in LLVM's opt to see what comes out, but I'd be pretty sure if we are careful, it can optimize everything away and get us back to ints.

Reply via email to