https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108531
Bug ID: 108531 Summary: Imaginary types are not supported, violating ISO C Annex G Product: gcc Version: 12.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: Keith.S.Thompson at gmail dot com Target Milestone: --- #include <stdio.h> #include <complex.h> int main(void) { #ifdef __STDC_IEC_559_COMPLEX__ printf("__STDC_IEC_559_COMPLEX__ is defined as %d\n", __STDC_IEC_559_COMPLEX__); #else printf("__STDC_IEC_559_COMPLEX__ is NOT defined\n"); #endif #ifdef _Imaginary_I printf("Imaginary types are supported\n"); #else printf("Imaginary types are NOT supported\n"); #endif } The output of this program, when compiled with "gcc -Wall -Wextra -std=c11 -pedantic-errors" is: __STDC_IEC_559_COMPLEX__ is defined as 1 Imaginary types are NOT supported ISO C Annex G was informative in C99, but was made normative in C11. Imaginary types are optional in C11, but are mandatory for any implementation that predefines __STDC_IEC_559_COMPLEX__. (Complex types were made optional in C11, but that's not relevant here.) To conform to C11 (and later), gcc should either implement imaginary types as defined in Annex G or remove the definition of __STDC_IEC_559_COMPLEX__.