x и y оба являются lvalue одного и того же типа.Я не думаю, что в этом коде есть что-то слепое.Но вы можете найти некоторый компилятор, который не может скомпилировать этот код.
Я обычно предпочитаю использовать код if / else, который выдает точно такой же код и гораздо более читабелен для сопровождающих.А если вы хотите отследить ошибку, проще поместить каждую ветку в отдельную ветку, проще установить точки останова.
Контроль кода также легче проверить.