On Thu, 5 Jan 2012, Joseph S. Myers wrote:
On Thu, 5 Jan 2012, Tom de Vries wrote:
My hunch is that this recent glibc change causes/triggers the error:
...
[BZ #13528]
* libio/stdio.h: Do not declare gets for ISO C11 and _GNU_SOURCE.
...
I see this both on ARM and MIPS.
Should I file this as a problem in gcc or glibc?
It's a bug in libstdc++ that it doesn't allow for headers that have
removed gets in accordance with C11.
And it is a bug for glibc to remove gets even when __cplusplus is defined.
Also, it used to be that _GNU_SOURCE meant "declare everything and more",
so it is surprising to now have it remove declarations, although it is
understandable.
Do you have any suggestion on what libstdc++ can do when faced with C
libraries that will randomly declare gets or not depending on flags? It
would need knowledge of these exact flags so it can provide a replacement
exactly when it isn't declared (or at least remove the using ::gets in
that case, even if that is non-standard). The easiest workaround I can
think of is to implement a failsafe version of using in the front-end, but
there might be better solutions.
If the final C++11 still requires gets in <cstdio>, despite it being
removed in C11, that's probably also a bug in C++11. (At least the most
recent draft I have to hand still has gets in <cstdio>.)
It still has it. And it is based more on C99 than C11 (which didn't exist
at the time), even if they did try to synchronize on some features.
--
Marc Glisse