https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114007
--- Comment #11 from Iain Sandoe <iains at gcc dot gnu.org> --- looking at n2176 - C18 there is no mention of __has_c* looking at n3047 - C23 there is mention only of __has_c_attribute OTOH, there is no prohibition in declaring __has_cpp_attribute (c.f. an actual prohibition in declaring __cplusplus). So, perhaps this is a GCC extension that should only be applied to -std=gnucxx?