Came up in https://github.com/llvm/llvm-project/issues/152113 When trying to perform following cast: ```c++ int main() { char *s = "abc"; (typeof(*s)(*)[3])s; } ``` Clang (and GCC FWIW), produce following error ([godbolt](https://godbolt.org/z/M7Ye8o3G4)): ``` main.cpp:6:18: error: expected expression 6 | (typeof(*s)(*)[3])s; ``` But this works fine in C ([godbolt](https://godbolt.org/z/j33qrGv1r)). However, wrapping the `typeof` in another `typeof` works fine in both C ([godbolt](https://godbolt.org/z/fr1WP7eGo)) and C++ ([godbolt](https://godbolt.org/z/4z7xhPfGn)): ```c++ int main() { char *s = "abc"; *(typeof(typeof(*s))(*)[3])s; } ``` What's the correct behaviour here?