Marc Glisse <marc.glisse@xxxxxxxx> writes: > On Sun, 18 Sep 2011, Jeffrey Walton wrote: > >> On Sat, Sep 17, 2011 at 4:21 PM, Jonathan Wakely <jwakely.gcc@xxxxxxxxx> wrote: >>> On 17 September 2011 14:23, Jeffrey Walton wrote: >>>> /usr//include/cryptopp/cryptlib.h:99: error: template with C linkage >>> ... >>>> I've tried adding '-x c++' to force c++ in the files. >>> >>> That's obviously not going to help. >>> >>> If the compiler complains about a template, it's not compiling C, >>> because there's no such thing in C. Ditto for C linkage; everything >>> in C has C linkage, so there's no concept of any other kind of >>> language linkage, so no reason a C compiler would ever mention "C >>> linkage". So the compiler was already treating the files as >>> containing C++ (just apparently assuming that everything in a system >>> directory gets an implicit extern "C" around it.) >> OK, thanks. I'm not sure what the implications of "system compiler" >> are, but OpenBSD's configuration did not like those files in >> /usr/include. >> >> $ g++ -v >> Reading specs from /usr/bin/../lib/gcc-lib/i386-unknown-openbsd4.9/4.2.1/specs >> Target: i386-unknown-openbsd4.9 >> Configured with: OpenBSD/i386 system compiler >> Thread model: posix >> gcc version 4.2.1 20070719 >> $ >> >> Do you have any ideas why a location would make a difference? > > Antique platforms have system headers that don't know about C++, so > g++ implicitly adds extern "C" around them. And being a system header > is a property that depends on the directory the file is in. This approach is controlled on a target-by-target basis, by the way. If OpenBSD's header files are C++ ready, gcc's OpenBSD target configuration should be changed to define NO_IMPLICIT_EXTERN_C. Ian