Essas expressões estão definidas?
int x = 5, y;
y = ++(int){++x};
//or
y = (int){x++}++;
e (não consigo encontrar nenhuma razão para não ser definido)
int x = 5;
x = ++(int){++x};
//or
x = (int){x++}++;
Na IMO, existem pontos de sequência claros onde o novo objeto (literal composto) é criado.