https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82417
Bug ID: 82417 Summary: Macros from <complex.h> defined in C++11 Product: gcc Version: 8.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- The C++11 standard says that <complex.h> should just include the C++ <complex> header and completely ignore the C library's header. We take some liberty and include _both_ C++'s <complex> and C's <complex.h>, because historically <complex.h> wasn't part of the C++ standard and so including it used the C version and worked OK. However this means that the following valid C++11 code is rejected: #include <complex.h> std::complex<double> I{0, 1}; In file included from /usr/include/c++/7/complex.h:36:0, from I.cc:1: I.cc:3:22: error: expected unqualified-id before ‘__extension__’ std::complex<double> I{0, 1}; ^ I.cc:3:22: error: expected ‘)’ before ‘__extension__’ For C++11 mode we should #undef the macros that <complex.h> defines with non-reserved names, and maybe consider not including <complex.h> at all for -std=c++1* modes.