The return type is the type of the left operand after integral promotions.
My reading of the above suggests that, if Wire.read() returns a byte, the result is a byte, further suggesting that the result of Wire.read()<<8 would always be zero.
That suspicion is supported by the result of the following little program, which prints "0":
byte shift8 (byte x) {return x<<8;}
void setup() {
Serial.begin(9600);
int y= shift8(1);
Serial.println(y);
}
void loop(){
}
On the other hand, it appears that the AVR hardware library version of Wire.read() actually returns an int, so the discussion may be moot:
// must be called in:
// slave rx event callback
// or after requestFrom(address, numBytes)
int TwoWire::read(void)
{
int value = -1;
// get each successive byte on each call
if(rxBufferIndex < rxBufferLength){
value = rxBuffer[rxBufferIndex];
++rxBufferIndex;
}
return value;
}