Почему первый возвращает ссылку?
int x = 1; int y = 2; (x > y ? x : y) = 100;
А второй - нет?
int x = 1; long y = 2; (x > y ? x : y) = 100;
На самом деле, второй вообще не компилировался - «не lvalue left of assignment».