[ERROR]
The identifier was already used as tag. In C++, tags have the same namespace than objects. So there would be no name conflict compiling in C.
typedef const struct A A; // error in C++, ANSI-C ok
Compile without the option -C++, or choose another name for the typedef object id.