Why do we need the ctor overload "base_uint (void const* data, helper)"? The second argument doesn't seem to disambiguate or be used. Also, casting anything passed to void is somewhat dangerous. Is there a safer alternative, such as requiring user types to include a cast operator?