Why do you not make your unsigned int64 an abstract type (to make sure singed and unsigned int64 won't be mixed up)?