Инкремент оставляет после себя копию объекта, каким он был до изменения.
Поскольку первым выполняется выражение в скобках (x++), то оно заменятся аналогичной копией (1), а сам x увеличивается до 2. Следующим шагом идет сложение копии с самим значением x, которое к этому времени уже увеличилось. Вот и получается y = 2 + (1);
А вообще тут все зависит метода вычисления компилятором значений и если он будет другим, то выражение будет равно двум. Если стандарт накладывает требования на такой порядок(а мне лень лезть в стандарт), то все нормально, иначе undefined behavior.