This is a classic, longstanding bug in all versions of glibc and many other C libraries. The essence is that struct ip_opts { ... char ip_opts[40]; ... is not legal C++. The traditional way of fixing this is to capitalize the first letter of the member when compiling for C++. A patch which does this, and applies to all versions of glibc is at http://www.pengutronix.de/software/ptxdist/patches-0.5.2/glibc-2.2.5/generic/glibc-2.2.5-ip_opts.patch There have been repeated requests to fix this over the years, but for some reason, nobody filed a glibc bug report before! Here are a few old posts about the problem in general, and how it's been fixed elsewhere: http://cvs.openbsd.org/cgi-bin/query-pr-wrapper?full=yes&numbers=681 http://gcc.gnu.org/ml/gcc/2002-05/msg00791.html http://www.cygwin.com/ml/ecos-patches/2002-06/msg00005.html http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=19880 So, time to apply this patch in glibc head (and to the head of the 2.3 branch, if possible)?
Minor detail: the only version of gcc in common use that reports this error is gcc-2.95.3. The gcc296 shipped by Fedora does not report this error. So perhaps this is only of interest to embedded system developers and/or those who use ancient compilers. I'm marking this bug WONTFIX for now; affected developers can apply the patch.
Created attachment 940 [details] Patch to make glibc's in.h compatible with gcc-2.95.3 and perhaps other C++ compilers.
Actually I think this is not a bug at all: Older versions of gcc suppress the warning when compiling system header files. Newer versions of gcc implement DR#80 for C++, which allows data fields to have the same name as the class if the class does not have a user-declared constructor. http://std.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#80