> all valid C programs will still compile, though not necessarily C++ ones
I don't think that's true:
struct foo {
int a;
int b;
};
char arr[sizeof(struct foo) == sizeof(int) ? -1 : 1];