I've done some more thinking about the overflow exceptions. The C-runtime implementations vary on whether or not they set errno to ERANGE. They do all seem to return HUGE_VAL though. Perhaps the integer implementation should not overflow, but instead return INT_MAX.
There are also inconsistent implementations of 0**0. Microsoft seems to return 1.