Например, как назвать тип x, объявленного как int x[]? Соответствующего типовыражения на C (и на плюсах) написать нельзя.
Можно и пишут. Вы тут что-то путаете, в Си можно вывести "чистое выражение типа" совершенно любой сложности. И записывается оно именно так, что берем выражение для определения переменной, а потом из него просто удаляем имя переменной. Парсер справится. Для человека несколько сложно, надо искать самые innermost скобки и двигаться вправо-влево от них разглядывая приоритеты того что собственно стоит справа, а что слева.
Обсуждения о том что бы было если бы правила были проще и для человека и к примеру тип всегда читался слева-направо встречаются. Но в сущности если присмотреться к основной массе реального кода, то видно, что на практике никто не заморачивается введениями сложных типов не обернув их тайпедефами от корней, так что самое сложное что может проскочить - указатель на указатель на что-то или указатель на функцию/метод.