[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
sys-socket.in.h/alignof.h usage problem with C++
From: |
Gary V. Vaughan |
Subject: |
sys-socket.in.h/alignof.h usage problem with C++ |
Date: |
Sun, 22 Aug 2010 21:54:09 +0700 |
While trying to compile a C++ package, and using the gnulib socket modules to
paper over the differences between various vendor implementations, I tripped
over the following error on Solaris 2.6 and 7:
"lib/alignof.h", line 28: Error: Template declarations cannot have extern "C"
linkage.
1 Error(s) detected.
Triggered by the following code in alignof.h:
/* Determine the alignment of a structure slot (field) of a given type,
at compile time. Note that the result depends on the ABI.
Note: The result cannot be used as a value for an 'enum' constant,
due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */
#if defined __cplusplus
template <class type> struct alignof_helper { char __slot1; type __slot2; };
...
The problem is that the package C++ headers wrap inclusions of C headers in
`extern "C"', which seems like a reasonable thing to do.
I'm curious who is wrong here: Is it wrong for gnulib's alignof.h to use C++
conditionally and assume that it is not included from inside an `extern "C"' in
an outer file? Is it wrong for the package to mistrust the system C headers so
much that they are only included to a C++ file inside an `extern "C"'
declaration? Or is it wrong for the C++ compiler to complain about use of
templates inside `extern "C"'?
I have a workaround already (moving `#include <sys/socket.h>' outside the
`extern "C"'), but I'm curious about the real culprit, and maybe the gnulib
generated headers want to work properly when used like this?
Cheers,
--
Gary V. Vaughan (address@hidden)
PGP.sig
Description: This is a digitally signed message part
- sys-socket.in.h/alignof.h usage problem with C++,
Gary V. Vaughan <=