Umm, why bring up the basetype nonsense at all. The arithemtic is done in whatever type is associated with the expression, not the base type. Nothing else makes sense. ie, conversions are explicit.
The conversions are explicit, but are to the base type, which is also the type associated with the expression. By mentioning the base type, we're just saying what the type of the expression will be. So, back to my example. If I have an object with a range [0, 0x7ff fffff] based on the type of the object and I add one to that object, then I can safely conclude that the result of the addition has the range [1, 0x7fffffff]. Right? If the addition were in the type of the object, yes. But it's not supposed to be. It's supposed to be in the *base type* of the object which won't have the TYPE_MAX_VALUE restriction so that nobody would try to conclude that there was an upper-bound limit.