Hi Martin,
In short yes, it is special behavior but I'm not sure that it is intended. Each target can opt in to *not* have -isystem implicitly wrap headers in extern C construct. Arm target does not do anything special and thus inherit that default behavior of implicit extern C, except when targeting uclinux systems. It seems from [1] that it is this way for legacy reason.
[1] https://gcc.gnu.org/ml/gcc-patches/2012-06/msg01151.html
Best regards,
Thomas
On 24 January 2018 at 17:02, Kaul, Martin Martin.Kaul@leuze.com wrote:
Hi,
given the following code:
-- isystem_test.cpp ------------- #include < isystem_test.h>
bool dummy_function( void ) { return false; }
-- isystem_test.h ------------------ template <class _CS_cT> class allocator { };
and g++ version: arm-eabi-g++.exe (Linaro GCC 7.2-2017.11)
- compiling with "arm-eabi-g++ -I . -g -c isystem_test.cpp"
--> OK
- compiling with " arm-eabi-g++ -isystem . -g -c isystem_test.cpp "
--> output error: In file included from isystem_test.cpp:3:0: ./isystem_test.h:3:1: error: template with C linkage template <class _CS_cT> ^~~~~~~~
It seams that the option -isystem changes the include of isystems_test.h into a C include, i.e. the header content seems to be handled as C-Code
Same error behavior with arm-eabi Linaro GCC 6.4-2017.11, Linaro GCC 6.3-2017.05
Testing the same with the mingw msys g++ compiler outputs no error: g++.exe (Rev2, Built by MSYS2 project) 7.2.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Also no errors for: arm-linux-gnueabihf-g++.exe (Linaro GCC 6.3-2017.05)
Is there a special behavior for arm-eabi g++ compiler?
Best regards Martin Kaul
linaro-toolchain mailing list linaro-toolchain@lists.linaro.org https://lists.linaro.org/mailman/listinfo/linaro-toolchain