I am not sure what you mean by "weak" type system. C's type system is not weak IMHO and also differentiates between arrays and pointers:
_Generic((typeof(x), int*: 1, int[]: 2)
\_Generic with type argument is a new feature, it is a bit less elegant without it: _Generic((typeof(x)*)0, typeof(int*)*: 1, typeof(int[])\*: 2)