Wire.h two versions of same method, differ only in argument types WHY?

Not exactly the same, but when you get into larger types

void setup() {
  Serial.begin(9600);
}

void test(uint8_t arg1) {
  Serial.println(arg1);
}

void test(long arg1) {
  Serial.print( "Test with long:");
  test((uint8_t)arg1);
}

void loop() {
  static int tempint=-50;
  uint8_t temp8 = tempint;
  long tempL = tempint;
  test(tempint);
  test(temp8);
  test(tempL);
  tempint+=25;
  delay(1000);
}

you get

...
adaradio:19:15: error: call of overloaded 'test(int&)' is ambiguous

   test(tempint);

               ^

C:\Users\Brian\AppData\Local\Temp\arduino_modified_sketch_960433\adaradio.ino:6:6: note: candidate: void test(uint8_t)

 void test(uint8_t arg1) {

      ^~~~

C:\Users\Brian\AppData\Local\Temp\arduino_modified_sketch_960433\adaradio.ino:10:6: note: candidate: void test(long int)

 void test(long arg1) {

      ^~~~

exit status 1
call of overloaded 'test(int&)' is ambiguous
[code]
I don't know the history of the IDE, but there may have been issues in the past and if you cover all the bases, the code has a better chance or working and stay working as the IDE/compiler evolves